NaN 等于 NaN 吗?

IT技术 javascript function nan parseint parsefloat
2021-02-13 10:42:07
parseFloat("NaN")

返回“NaN”,但

parseFloat("NaN") == "NaN"

返回假。现在,它确实返回 false 可能是一件好事,但我不明白这是怎么回事。JavaScript 创建者是否只是将其作为特例?因为否则我无法理解这是如何返回 false 的。

6个回答

更新 2

ECMAScript 6 的新功能Object.is()函数。这旨在进一步增强===检查。这个新函数的好处之一是Object.is(NaN, NaN)现在将返回 true。如果您能够使用 ECMAScript 6,那么这对您来说将是最具可读性和一致性的解决方案。

原来的

检查这一点的正确方法是:

isNaN(parseInt(variable))

如果您检查的是 NaN,则该函数将返回 true。此方法内置于 JavaScript 规范中。

使用 jQuery

jQuery 内置了自己的isNaN函数,最初是为了帮助解决浏览器之间的一些差异,并添加一些额外的检查,以便可以使用它们的版本而不是 VanillaJS 中的版本。

更新 jQuery

在 jQuery 1.7 之后,他们将此函数更改为$.isNumeric().

开关文档

如果您查看此 Stack Overflow 问题,您会发现很多时候isNaN()返回的答案在直觉上会被视为“不正确”的答案,但在规范中却是正确的。

避免使用香草的重要原因之一isNaN()null将返回false,让您认为它是一个数字。但是,jQuery 函数涵盖了更大范围的直观结果。

从他们的文档:

从 jQuery 3.0 开始,$.isNumeric() 仅当参数是数字类型,或者它是字符串类型并且可以强制转换为有限数字时才返回 true。在所有其他情况下,它返回 false。

仅仅因为 jQuery 更改了他们正在使用的函数并不意味着您必须这样做。
2021-03-18 10:42:07
这与 jQuery 无关。什么?
2021-04-06 10:42:07
parseInt()并且parseFloat()有一个相当严重的问题,即接受出现在有效数字之后字符串中的“垃圾”字符
2021-04-14 10:42:07

当 JavaScript 函数返回 时NaN,这不是文字字符串,而是全局空间中的对象属性。您无法将其与 string 进行比较"NaN"

请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN

NaN 不是对象;它是一个特殊的原始值。(这恰好是一个只读属性的值全局对象)。
2021-04-02 10:42:07

这是一个特例,NaN 是 Javascript 中唯一不等于自身的东西。

尽管关于字符串与 NaN 对象的其他答案也是正确的。

那么为什么 "NaN" == "NaN" 返回 true?返回 false 可能没有意义,但是......
2021-03-26 10:42:07
@joseph "NaN" == "NaN" 正在比较两个(相等的)字符串。
2021-03-28 10:42:07

NaN是不等于自身的对象的少数例子之一。事实上,这个属性是用来实现通用bool IsNaN(number)方法的:

function isNaN(x)
{ 
    return x != x; 
}
将示例从 C# 更改为 JavaScript。
2021-03-25 10:42:07
NaN 根本不是一个对象,它是一个类型编号的常量。
2021-03-28 10:42:07
这看起来很有趣javascript
2021-03-31 10:42:07
“几个例子”?还有另一个吗?如果是这样,则此实现在其他示例中失败。
2021-04-02 10:42:07
  • Number(由 ParseFloat 返回)与string string转换为Number
  • NaN不等于任何其他对象(包括NaN

你得到NaN==NaN根据第二条规则,这是错误的。