2

在这个 JavaScript 测试中让我难过的一个问题是~null计算结果为-1.

为什么~null评价为-1

4

2 回答 2

10

那是因为~is 一个数字运算符,所以它转换null0first:

> ~0
-1

它相当于这个表达式:

~(+null)

同样地:

> ~[]
-1
> ~{}
-1
于 2013-02-06T00:02:24.730 回答
1

首先,~是位运算NOT符。这意味着它会翻转数字表示中的所有位。0010 1010变成1101 0101.

由于计算机使用 2 的补码存储数字,这个等式成立:

~number == -number - 1

从我之前的例子可以看出:

0010 1010(这代表数字42

1101 0101(这代表数字-43

现在,因为~is 是一个对数字进行操作的运算符,所以它的参数首先被转换为一个数字。由于null被强制转换为 a 0,因此您会得到-1结果(根据上述等式)。

于 2014-01-18T21:15:13.817 回答