为什么JavaScript中的"〜undefined"为-1?

zan*_*ngw 20 javascript undefined

根据这篇文章,运行以下代码

> ~function () { console.log('foo');}()
  foo
  -1
Run Code Online (Sandbox Code Playgroud)

众所周知,上述匿名函数的返回值是undefined.为什么~undefined-1?我找不到任何类似的问题.

Fel*_*ing 21

~是按位不是.它用于ToInt32将参数转换为数字.ToInt32定义为:

  1. 设数为ToNumber(参数).
  2. ReturnIfAbrupt(数字).
  3. 如果number为NaN,+ 0,-0,+∞或-∞,则返回+0.
    ...

反过来,ToNumber(undefined)返回NaN,所以根据步骤3,ToInt32返回0.

~0-1.


Min*_*ato 7

JS中的每个不能用位表示的东西,例如"undefined,NaN"被处理为0或者0000000000000b~运算符,因为它将操作数转换为有符号整数,请参阅@felixkling答案以获取更多详细信息,因为操作~不是BITwise或者1s补码翻转位,因此语句111111111111b作为一个序列产生1,当在二进制级别处理数字时,MSB(最高有效位)被视为a,sign因此当将所有转换0s1s它时,得到例如-1try的十进制值~0.并使用此代码获取数字的二进制表示(-3 >>> 0).toString(2))