Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么~null===-1?_Javascript - Fatal编程技术网

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
您的断言不一定正确,这取决于微处理器的体系结构。