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

Ion*_*zău 55 javascript nan

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

> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false
Run Code Online (Sandbox Code Playgroud)

文档页面上,我看到:

针对NaN的测试

等式运算符(=====)不能用于测试值NaN.请isNaN改用.

有什么参考可以回答这个问题吗?这将是受欢迎的.

SLa*_*aks 47

严格的答案:因为JS规范如此说:

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

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

  • 同样,它也是定义自然数的公理的一部分。查看第二个项目符号:https://en.wikipedia.org/wiki/Peano_axioms#Formulation (2认同)

NPE*_*NPE 12

此行为由IEEE-754标准(在此方面遵循JavaScript规范)指定.

有关扩展讨论,请参阅对于IEEE754 NaN值返回false的所有比较的基本原理是什么?