在这个 JavaScript 测试中让我难过的一个问题是~null
计算结果为-1
.
为什么~null
评价为-1
?
那是因为~
is 一个数字运算符,所以它转换null
为0
first:
> ~0
-1
它相当于这个表达式:
~(+null)
同样地:
> ~[]
-1
> ~{}
-1
首先,~
是位运算NOT
符。这意味着它会翻转数字表示中的所有位。0010 1010
变成1101 0101
.
由于计算机使用 2 的补码存储数字,这个等式成立:
~number == -number - 1
从我之前的例子可以看出:
0010 1010
(这代表数字42
)
1101 0101
(这代表数字-43
)
现在,因为~
is 是一个对数字进行操作的运算符,所以它的参数首先被转换为一个数字。由于null
被强制转换为 a 0
,因此您会得到-1
结果(根据上述等式)。