~(function () {}).toString();
是完全有效的JavaScript语法,我看到它返回-1
。
我知道~
不是运营商。例如~5
= ~0101
,这意味着基数为2 1010
,小数为10
。
console.log(~(function () {}).toString());

但这种情况的解释是什么?
也许~NaN
会返回-1
。
答案 0 :(得分:2)
根据spec
让oldValue为ToInt32(GetValue(expr))。
Number((function () {}).toString();)
- > Number("function () {}")
- > NaN
再次按照spec
如果数字是NaN,+ 0,-0,+∞或-∞,则返回+0。
所以~NaN
等于~0
-1
答案 1 :(得分:1)
取自this blog: The Great Mystery of the Tilde(~):
代字号是一个操作员,可以做一些你通常认为没有任何意义的事情。它是一个一元运算符,它使表达式向右执行这个小算法(其中N
是波浪号右侧的表达式):-(N+1)
。有些样本见下文。
console.log(~-2); // 1
console.log(~-1); // 0
console.log(~0); // -1
console.log(~1); // -2
console.log(~2); // -3