为什么〜运算符在Javascript中为函数返回-1?

时间:2017-10-18 13:43:15

标签: javascript function operators

~(function () {}).toString();是完全有效的JavaScript语法,我看到它返回-1

我知道~不是运营商。例如~5 = ~0101,这意味着基数为2 1010,小数为10



console.log(~(function () {}).toString());




但这种情况的解释是什么?

也许~NaN会返回-1

2 个答案:

答案 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