为什么NaN === NaN
会在Javascript中返回false
?
> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false
在documentation page我看到了:
针对NaN
的测试平等运算符(
==
和===
)不能用于测试NaN
的值。请改用isNaN
。
是否有任何参考可以回答问题?这将是受欢迎的。
答案 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
,那么它将导致错误值。
您可以在此处找到详细规则 -