根据这篇文章,运行以下代码
> ~function () { console.log('foo');}() foo -1
众所周知,上述匿名函数的返回值是undefined
.为什么~undefined
是-1
?我找不到任何类似的问题.
~
是按位不是.它用于ToInt32
将参数转换为数字.ToInt32
定义为:
设数为ToNumber(参数).
ReturnIfAbrupt(数字).
如果number为NaN,+ 0,-0,+∞或-∞,则返回+0.
...
反过来,ToNumber(undefined)
返回NaN
,所以根据步骤3,ToInt32
返回0
.
而~0
为-1
.
JS中的每个不能用位表示的东西,例如"undefined,NaN"被处理为0
或者0000000000000b
为~
运算符,因为它将操作数转换为有符号整数,请参阅@felixkling答案以获取更多详细信息,因为操作~
不是BITwise或者1s补码翻转位,因此语句111111111111b
作为一个序列产生1
,当在二进制级别处理数字时,MSB(最高有效位)被视为a,sign
因此当将所有转换0s
为1s
它时,得到例如-1
try的十进制值~0
.并使用此代码获取数字的二进制表示(-3 >>> 0).toString(2))