【问题标题】:Why ~ operator returns -1 for a function in Javascript?为什么〜运算符为Javascript中的函数返回-1?
【发布时间】:2018-03-30 09:57:08
【问题描述】:

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

我知道~ 不是运营商。例如~5=~0101,这意味着1010 以2 为底,10 以十进制表示。

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

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

也许~NaN 返回-1

【问题讨论】:

标签: javascript function operators


【解决方案1】:

根据spec

设 oldValue 为 ToInt32(GetValue(expr))。

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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多