2017-10-18 90 views
1

~(function() {}).toString();是绝对有效的JavaScript语法,我看到它返回-1。我知道~不是运营商。例如~5 = ~0101这意味着基数2中的1010和十进制中的10为什么〜运算符在Javascript中为函数返回-1?

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

但什么是在这种情况下如何解释呢?

也许~NaN返回-1

+0

说明:https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/ –

+1

这个,如果你同'NaN'会尝试这样做,就像'NaN'一样,它会得到相同的结果。 – Krusader

回答

2

作为每spec

设OLDVALUE是ToInt32(的GetValue(表达式))。

Number((function() {}).toString();) - >Number("function() {}") - >NaN

再次按spec

如果数是NaN,0,-0,+∞,或-∞,返回0。

所以~NaN~0这是-1

2

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 
相关问题