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

Len*_*oyt 10 javascript

我想知道为什么undefined == undefined但是NaN != NaN.

use*_*716 11

因为它是在抽象等式比较算法严格等式比较算法中定义的.

如果操作数为==或者===NaN,则返回false.

抽象

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

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

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

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

  • 并且它以这种方式定义,在两个等式算法中仅仅因为规范符合[IEEE 754](http://en.wikipedia.org/wiki/IEEE_754)数字类型标准的规则. (2认同)