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定义为:
- 设数为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它时,得到例如-1try的十进制值~0.并使用此代码获取数字的二进制表示(-3 >>> 0).toString(2))