目录
操作符
1.一元操作符
1.1 递增递减操作符
递增(++),递减(--)
还可以应用于字符串,布尔值,浮点数值和对象。先将其转换成数字值,然后在进行加1操作。
1.2 一元加减操作符
在对非数值应用一元加操作符时该操作符会像Number()转型函数一样对这个值进行转换。一元减操作符应用于非数值时遵循与一元加操作符一样的规则,然后再将得到的数值转换成负值。
2.位操作符
- 按位非(~) 本质:操作数负值减1
- 按位与(&) 对相同位置上的两个数执行AND操作
- 按位或(|)
- 按位异或(^)
- 左移(<<)
左移不影响操作数的符号位,用0填充空位 - 右移
1)有符号右移(>>),用符号位填充空位
2)无符号右移(>>>),用0填充空位
3.布尔操作符
- 逻辑非(!)
- 逻辑与(&&)短路操作(false)
1)如果第一个操作数是对象,则返回第二个操作数
2)如果第二个操作数是对象,当第一个操作数的求值结果为true的情况下,返回第二个对象
3)如果两个操作数都是对象,则返回第二个操作数
4)如果第一个操作数是null,NaN或undefined,则返回null,NaN或undefined - 逻辑或(||)短路操作(true)
1)如果第一个操作数是对象,则返回第一个操作数
2)如果第一个操作数的求值结果是false,则返回第二个操作数
3)如果两个操作数都是对象,则返回第一个操作数
4)如果两个操作数都是null或NaN或undefined,则返回null或NaN或undefined
4.乘性操作符
3个:乘法,出发和求模。在操作数为非数值的情况下自动进行类型转换。(后台使用Number()转型函数)
4.1 乘法
- 操作数是数值,正常运算。若超出最大范围,则返回Infinity或-Infinity
- 如果有一个操作数是NaN,则返回NaN
- 如果是Infinity与0相乘,则返回NaN
- 如果Infinity与非0数值相乘,则返回Infinity或-Infinity,符号取决于非0数
- 如果Infinity与Infinity相乘,结果是Infinity
- 如果有一个操作数不是数值,则后台调用Number()将其转换成数值,在应用上面规则
4.2 除法
- 操作数是数值,正常运算。若超出最大范围,则返回Infinity或-Infinity
- 如果有一个操作数是NaN,则返回NaN
- 如果是Infinity被Infinity除,则返回NaN
- 如果是0被0除,则返回NaN
- 如果是非零数被0除,返回Infinity或-Infinity,符号取决于非零数
- 如果是Infinity被非零数除,返回Infinity或-Infinity,符号取决于非零数
- 如果有一个操作数不是数值,则后台调用Number(),将其转换为数值,再应用上面规则
4.3 求模
- 操作数是数值,正常运算。若超出最大范围,返回Infinity或-Infinity
- 若被除数是无穷大,除数是有限大,则返回NaN
- 若被除数是有限大的数值,二除数是0,则返回NaN
- 若Infinity被Infinity除,则返回NaN
- 若被除数是有限大,除数是无穷大,则返回被除数
- 若被除数是0,则返回0
- 若有一个操作数不是数值,则后台调用Number(),将其转换为数值,再应用上面的规则
5.关系操作符
小于<,大于>,小于等于<=,大于等于>=
任何操作数与NaN进行关系比较结果都是false
6.相等操作符
相等和不相等--先转换后比较
全等和不全等--仅比较不转换
6.1 相等(==)和不相等(!=)
基本规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值
- 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值
- 如果一个操作数为对象,另一个不是,则调用对象的valueOf()方法,用得到的基本类型按前面的规则进行比较
- null和undefined是相等的
- 如果有一个操作数是NaN,则相等操作符返回false,不相等操作符返回true
- 如果两个操作数都是对象,则比较是否为同一对象
6.2 全等(===)和不全等(!==)
与相等和不相等操作的区别:在比较之前不转换操作数
null===undefined false