在这个 JavaScript 测试中让我难过的一个问题是~null计算结果为-1.
为什么~null评价为-1?
那是因为~is 一个数字运算符,所以它转换null为0first:
> ~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结果(根据上述等式)。