Javascript 为什么~null===-1?
一个让我困惑的问题是,Javascript 为什么~null===-1?,javascript,Javascript,一个让我困惑的问题是,~null的计算结果是-1 为什么~null计算为-1?这是因为~是一个数字运算符,所以它首先将null强制转换为0: > ~0 -1 这相当于这个表达式: ~(+null) 同样地: > ~[] -1 > ~{} -1 首先,~是一个按位而不是运算符。这意味着它翻转数字表示中的所有位0010 1010变为1101 0101 由于计算机使用2的补码存储数字,此等式成立: ~number == -number - 1 如我前面的示例所示: 00101
~null
的计算结果是-1
为什么
~null
计算为-1
?这是因为~
是一个数字运算符,所以它首先将null
强制转换为0
:
> ~0
-1
这相当于这个表达式:
~(+null)
同样地:
> ~[]
-1
> ~{}
-1
首先,
~
是一个按位而不是运算符。这意味着它翻转数字表示中的所有位<代码>0010 1010
变为1101 0101
由于计算机使用2的补码存储数字,此等式成立:
~number == -number - 1
如我前面的示例所示:
00101010
(表示编号42
)
1100101
(表示编号-43
)
现在,因为~
是一个对数字进行运算的运算符,所以它的参数首先转换为一个数字。由于null
被强制转换为0
,因此得到-1
(根据上述等式)。如文档中所示,按位记下任何数字x产生-(x+1)。例如,~5产生-6。
-因此,null/undefined
变成0
是-(0+1)
导致-1
您的断言不一定正确,这取决于微处理器的体系结构。