加法 +
1、算术加法
2、字符串连接
减乘除 - * /
都是数值运算,所有运算子都转为数值,转不成结果就是NaN。
比较 > >= < <=
原始值,对象都是比较值
相等 == !=
原始值比较值,对象之间比较地址
严格相等 === !==
与 &&
a && b
如果a为true,返回b的值,而不是布尔值
如果a为false,直接返回a的值
var x = 1;
(x -= 1) && (x += 2) // 0
x // 0
x = 1
(x += 1) && (x -= 2) // 0
x // 0
或 ||
a || b
如果a判定为true,则直接返回a的值
如果a判定为false,则返回b的值
位运算 & | ~ ^ << >> >>>
只对整数起作用。
不是整数则自动转为32位整数。
自动规则:
number, string, boolean -> number or NaN
object - valueOf - toString - number
NaN进行位运算的结果:
NaN | a // a
NaN & a // 0
NaN ^ a // a
~NaN // -1
~~NaN // 0
NaN << a // 0
NaN >> a // 0
NaN >>> a // 0
表达式:
i = i | 0
功能:将任意的数据转换成32位的整数。
否运算:
~ 3 // -4
~ -3 // 2
~a = b, 且 [a]取整 + b = -1
表达式:
~~a
功能:将任意的数据转换成32位的整数。最快。
表达式:
10..toString(2) // "1010"
(-10).toString(2) // "-1010"
(-10>>>0).toString(2) // "11111111111111111111111111110110"
功能:查看负数数值二进制表示