在this JavaScript test上让我感到困惑的问题是~null
评估为-1
。
为什么~null
评估为-1
?
答案 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
(根据上面的等式)。