71

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

> undefined === undefined
true
> NaN === NaN
false
> a = NaN
NaN
> a === a
false

文档页面上,我看到了这个:

针对 NaN 进行测试

等式运算符 ( ==and ===) 不能用于针对 测试值NaN。改为使用isNaN

有没有可以回答这个问题的参考资料?这将是受欢迎的。

4

3 回答 3

61

严格的回答:因为 JS 规范是这么说的:

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

有用的答案:浮点数的 IEEE 754 规范(所有语言都使用浮点数)说 NaN 永远不相等。

于 2013-11-13T14:10:29.023 回答
13

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

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

于 2013-11-13T14:10:48.947 回答
1

尽管任一侧NaN===NaN包含相同的值并且它们的类型是Number但它们不相同。根据 ECMA-262,任何一方=====包含NaN则将导致错误值。

您可以在这里找到详细规则-

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

于 2015-01-27T07:06:40.253 回答