阮一峰JS教程读后感(五)运算符

About

最近没有工作反倒能够有时间细读慢品阮一峰大神的Js教程,本文主要记录作者在阅读该教程时的一些理解和容易混淆以及忘记的知识点。


一、算术运算符

  1. 相比其他语言,JavaScript中没有整除符号,所以在Js中如何实现整除呢?
1. Math.ceil(4/3); //向上整除 4/3=2;
2. Math.floor(4/3); //向下整除 4/3=1;
3. Math.round(5/2);//四舍五入 
4. parseInt(5/2);//丢弃小数部分,保留整数部分

准确的说第2、4种方法可以实现取整运算。
  1. 加法运算符有几个需要注意的地方,前面的博文中也讲到了Js有时会进行自动类型转换,所以可能会有不被预期的结果出现,这里需要mark
1. true + false + 1 + '1' // '21' 
// true 被转成1,false 被转成0,前面三个字符相加得2,然后和字符串相加涵义为拼接。
2. '3' + 4 + 5  // '345'
// 同样,前两个算子相加时因为其中有一个算子为字符串,那么结果为字符串
3. 1 - '2'  // -1
// 相减时会先把字符串转为数字,然后运算
4. 1 - 'a'  // NaN
因为字符串 a 无法用数字表示,所以该表达式为 NaN
5. 1 * '2' 或者 '2' / 1  // 2 
乘除同理,既然是算术运算,都是把字符串转为数字再进行计算。
6. var obj = { p: 1 }
    obj + 2  //'[object Object]2'
// 先调用对象的valueOf,如果返回对象则调用toString,返回'[object Object]'

总结一下:
(1)'+' 运算符具有字符串拼接的意思,所以需要根据表达式判断,一旦参与计算的算子有字符串,
就会把整个表达式视为字符串拼接,而'+'为左结合,所以在多元运算中需要注意'+'的位置。
(2)其他运算符除了数值计算外无他意,所以运算法则是将算子转成数字后计算,如果无法转换为数字,
则结果为NaN
  1. 如何判断一个整数是不是奇数?
/ 错误的写法
function isOdd(n) {
  return n % 2 === 1;
}
isOdd(-5) // false
isOdd(-4) // false

// 正确的写法
function isOdd(n) {
  return Math.abs(n % 2) === 1;
}
isOdd(-5) // true
isOdd(-4) // false

因为取余运算符 % 的运算结果与第一个算子有关,所以在运算时应使用绝对值函数
  1. 自增运算符简直大坑,不建议使用,如题:
var x = 1
x++ + ++x   //4
// 首先 x=1 ,x++ 表达式为1,此时 x=2,然后 ++x表达式为3,所以结果为4
// 可以看出 x++ 表达式中x虽然自增了但返回的是x自增以前的值
// ++x 表达式中x也自增了,并且返回的是x自增后的结果
  1. 指数运算符是左结合还是右结合?
右结合

二、比较运算符

  1. 非数字如何比较大小?
(1)如果是字符串,那么依次比较其字符的Unicode码点
(2)如果是汉字,则直接比较Unicode码点
(3)如果是对象或者其他复杂类型数值,则与Number运算法则一样,
    先执行valueOf,如果是对象再执行toString,然后比较。
  1. '= =' 和 '= = ='的区别?
相等运算符 == 会隐式执行类型转换,即转换后再进行比较,而 === 不会,所以一般不建议使用 ==。

三、布尔运算符

  1. 哪几个值使用取反运算符 '!' 后为true?
undefined  null  false  0  NaN  ''
  1. 如果需要把一个变量的值转成布尔值,有什么方法?
(1)Boolean(x)
(2)!!x  // 对一个值进行连续取反就代表转成布尔值

四、二进制位运算

  1. 如何将一个数转为32位整数?
function toInt32(x) {
  return x | 0;
}
或者
function toInt32(x) {
  return ~~x;
}
  1. 二进制取反运算
~3 // -4
~~2 // 2
运算过程:将3的32位整数形式按位取反,取反后变成负数,而Js用补码表示负数,所以,
要把这个数减1然后再次取反加上负号就对应该数的十进制数值了。
其中过程比较复杂,可简单记忆成一个数与其二进制取反数值相加等于-1.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    徵羽kid阅读 723评论 0 0
  • 1 算数运算符 https://wangdoc.com/javascript/operators/index.ht...
    智勇双全的小六阅读 519评论 0 0
  • 前言: 最近在学习javascript中数据类型、运算符,以及运算符优先级等相关基础知识,相对简单、基础但也很重要...
    饥人谷_远方阅读 797评论 0 3
  • 算术运算符 JavaScript 共提供10个算术运算符,用来完成基本的算术运算。 加法运算符:x + y 减法运...
    guyigg阅读 1,247评论 0 1
  • 一、ECMAScript 一元运算符 一元运算符只有一个参数,即要操作的对象或值。它们是 ECMAScript 中...
    耦耦阅读 556评论 0 0