为什么IsNaN(x)与x == NaN不同,其中x = NaN

时间:2013-02-20 17:38:46

标签: javascript nan

为什么这两者不同?

var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)

3 个答案:

答案 0 :(得分:1)

  

等式和不等式谓词是非信令的,因此x = x返回false可用于测试x是否是一个安静的NaN。

Source

这是IEEE 754中定义的规则,因此完全符合规范需要此行为。

答案 1 :(得分:1)

Nothing 等于NaN。任何比较都将始终为false

在严格和抽象比较算法中,如果类型相同,并且任一操作数为NaN,则结果为false

  

如果Type(x)是Number,那么

     
      
  • 如果xNaN,请返回false
  •   
  • 如果yNaN,请返回false
  •   

在抽象算法中,如果类型不同,并且NaN是操作数之一,则另一个操作数最终将被强制转换为数字,并将我们带回上面的场景。 / p>

答案 2 :(得分:0)

以下操作返回NaN

The divisions 0/0, ∞/∞, ∞/−∞, −∞/∞, and −∞/−∞
The multiplications 0×∞ and 0×−∞
The power 1^∞
The additions ∞ + (−∞), (−∞) + ∞ and equivalent subtractions.
Real operations with complex results:

The square root of a negative number
The logarithm of a negative number
The tangent of an odd multiple of 90 degrees (or π/2 radians)
The inverse sine or cosine of a number which is less than −1 or greater than +1.

以下操作返回数值运算的值。因此typeof Nan是一个数字。 NaN是数学术语中未定义的数字。 ∞+( - ∞)不等于∞+( - ∞)。但是我们得到的NaN是typeof数字,因为它是由数字运算产生的。

来自wiki