为什么undefined == undefined但是NaN!= NaN?

时间:2011-08-24 15:33:15

标签: javascript

我想知道为什么undefined == undefinedNaN != NaN

5 个答案:

答案 0 :(得分:11)

因为这是Abstract Equality Comparison AlgorithmStrict Equality Comparison Algorithm中的定义方式。

如果=====的任一操作数均为NaN,则返回false

<强>抽象

  
      
  • 如果Type(x)是Number,那么      
        
    • 如果x为NaN,则返回false。
    •   
    • 如果y为NaN,则返回false。
    •   
    • 如果x与y的数字值相同,则返回true。
    •   
    • 如果x为+0且y为-0,则返回true。
    •   
    • 如果x为-0且y为+0,则返回true。
    •   
    • 返回false。
    •   
  •   

编辑: @CMS所指出的不平等比较的动机是符合IEEE 754标准。

来自以下评论中提供的维基百科链接:

  

...然而,正常的比较操作将NaN视为无序,并将-0和+ 0相等。 totalOrder谓词将对这些情况进行排序,它还可以区分NaN的不同表示以及以不同方式编码的相同十进制浮点数。

答案 1 :(得分:4)

因为Math.sqrt(-5) !== Math.sqrt(-6)

答案 2 :(得分:2)

不确定为什么会这样,但为了检查某个语句或变量是否为NaN,您应该使用isNaN方法

答案 3 :(得分:0)

我认为因为IEEE标准允许NaN的多个表示。并非所有的NaN都彼此相等......

答案 4 :(得分:-1)

原因是创作者希望x == x返回false表示x是NaN,因此NaN == NaN必须返回false才能保持一致。