为什么NaN === NaN是假的?

时间:2013-11-13 14:08:56

标签: javascript nan

为什么NaN === NaN会在Javascript中返回false

> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false

documentation page我看到了:

  

针对NaN

的测试      

平等运算符(=====)不能用于测试NaN的值。请改用isNaN

是否有任何参考可以回答问题?这将是受欢迎的。

3 个答案:

答案 0 :(得分:44)

严格回答:因为JS规范says so

  
      
  • 如果Type(x)是Number,那么      
        
    • 如果x为NaN,则返回false。
    •   
    • 如果y为NaN,则返回false。
    •   
  •   

有用的答案:浮点数的IEEE 754规范(所有语言都用于浮点数)表示NaN永远不会相等。

答案 1 :(得分:12)

此行为由IEEE-754 standard指定(JavaScript规范在此方面遵循)。

有关详细讨论,请参阅What is the rationale for all comparisons returning false for IEEE754 NaN values?

答案 2 :(得分:1)

虽然NaN===NaN的任何一方包含相同的值且其类型为Number,但它们不相同。根据ECMA-262,=====的任何一方都包含NaN,那么它将导致错误值。

您可以在此处找到详细规则 -

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3