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

IT技术 javascript nan
2021-02-02 02:02:25

为什么 在 JavascriptNaN === NaN返回false

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

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

针对 NaN 进行测试

相等运算符(=====)不能用于测试值NaN使用isNaN来代替。

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

3个回答

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

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

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

@GrantGryczan 我什至不记得我当时的想法。现在我只是认为这是“仅仅因为等式运算符旁边的 NaN 不是数字,这并不意味着它们是相同的非数字”,然后将其保留在那个位置
2021-03-22 02:02:25
JavaScript 自动类型转换转换NaN为数字,因此检查数字是否不是数字将始终为 b false并且NaN !== NaN会是真的。
2021-04-06 02:02:25
@Loupax 这有什么关系?NaN 不是自然数。不是数字?这里有一个我没听懂的笑话吗?
2021-04-07 02:02:25
此外,它是定义自然数的公理的一部分。查看第二个要点:en.wikipedia.org/wiki/Peano_axioms#Formulation
2021-04-08 02:02:25

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

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

尽管 的任一侧NaN===NaN包含相同的值且它们的类型是Number但它们不相同。根据 ECMA-262,无论是一边==还是===包含NaN,都会导致错误值。

您可以在此处找到详细规则-

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