为啥 NaN 大于 JavaScript 中的任何数字? [复制]

Posted

技术标签:

【中文标题】为啥 NaN 大于 JavaScript 中的任何数字? [复制]【英文标题】:Why NaN is greater than any number in JavaScript? [duplicate]为什么 NaN 大于 JavaScript 中的任何数字? [复制] 【发布时间】:2015-01-14 23:11:41 【问题描述】:

这是一个例子:

parseInt(50) > parseInt('a');

在控制台上执行此操作时,它将返回false。我的原始代码看起来有点像这样:

variableB = parseInt(jQuery('some-element').html());
if(parseInt(variableA) > variableB)
     // do something
else
     // do something else

有时some-element 不会被填充,因此返回NaN。发生这种情况时,我确实希望执行 else 块。我实际上得到了我的期望,但我只是想确保它确实打算以这种方式工作。

【问题讨论】:

if(parseInt(variableA) > variableB && !isNaN(variableB)) 你没有测试反向,是吗? 比较,无论><还是===都是falseNaN 既不大于、小于或等于任何数字。而且,该死的,下次我回答而不是评论...>. 为什么不在继续之前检查variableB 是否是NaN 我没有测试反向大卫,感谢您指出这一点。 【参考方案1】:

在 IEEE 754 算术中,the floating-point model used by javascriptNaN(或非数字)根据定义,不小于、等于或大于任何其他数字。

请注意,这甚至适用于两个NaNs:如果x = NaNy = NaN,比较x === y 将返回false。

下面我引用IEEE 754 Standard(第 5.11 节)中指定此行为的部分:

可能有四种互斥关系:小于、等于、 大于且无序。最后一种情况出现在至少一个 操作数是NaN。每个NaN 应与无序比较 一切,包括它自己。

【讨论】:

【参考方案2】:

所有涉及 NaN 的比较都将始终返回 false。NaN 既不小于也不大于任何数字。

【讨论】:

严格来说,这并不完全正确,不是吗?还是 !==/!= 不算作“比较”? (我可能有点迂腐,但我不知道我是否在您的陈述中遗漏了技术性。)

以上是关于为啥 NaN 大于 JavaScript 中的任何数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 [NaN].includes(NaN) 在 JavaScript 中返回 true?

为啥这个函数返回 NaN?

JavaScript语言精粹知识点总结

为啥空数组类型转换为零? +[]

使用文本输入字段时出现 Javascript 中的 NaN

为啥我在本地文件中得到 NaN 但我的小提琴很好