我想知道为什么undefined == undefined
但NaN != NaN
。
答案 0 :(得分:11)
因为这是Abstract Equality Comparison Algorithm和Strict 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才能保持一致。