2013-02-06 122 views
2

难倒我的this JavaScript test的问题是~null评估为-1为什么〜null === -1?

为什么~null评估为-1

+0

'tilde'是一个[** Bitwise NOT Operator **](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators#.7E_(Bitwise_NOT)) - 正如在文档中看到的那样:“按位注释任意数字x产生 - (x + 1)”。例如,〜5产生-6.' - 因此,变成'0'的'null/undefined'是' - (0 + 1)',产生'-1' – Nope

+0

你的断言不一定是真的,它取决于微处理器的体系结构。 –

回答

10

这是因为~是一个数值运算符,所以它转换null0第一:

> ~0 
-1 

这将相当于该表达式:

~(+null) 

同样:

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

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

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

~number == -number - 1 

如可以从我以前的例子来示出:

0010 1010(这代表数42

1101 0101(这代表号码-43

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

+0

+1实际解释如何工作 – miraculixx