为什么~null === -1?

时间:2013-02-06 00:00:57

标签: javascript

this JavaScript test上让我感到困惑的问题是~null评估为-1

为什么~null评估为-1

2 个答案:

答案 0 :(得分:10)

这是因为~是一个数字运算符,因此它首先将null强制转换为0

> ~0
-1

这相当于这个表达式:

~(+null)

同样地:

> ~[]
-1
> ~{}
-1

答案 1 :(得分:1)

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

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

~number == -number - 1

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

0010 1010(这代表数字42

1101 0101(这代表数字-43

现在,因为~是对数字进行操作的运算符,所以参数首先被强制转换为数字。自从null投射到0后,您会得到-1(根据上面的等式)。