parseFloat("NaN")
返回“NaN”,但
parseFloat("NaN") == "NaN"
返回假。现在,它确实返回 false 可能是一件好事,但我不明白这是怎么回事。JavaScript 创建者是否只是将其作为特例?因为否则我无法理解这是如何返回 false 的。
parseFloat("NaN")
返回“NaN”,但
parseFloat("NaN") == "NaN"
返回假。现在,它确实返回 false 可能是一件好事,但我不明白这是怎么回事。JavaScript 创建者是否只是将其作为特例?因为否则我无法理解这是如何返回 false 的。
更新 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。
当 JavaScript 函数返回 时NaN
,这不是文字字符串,而是全局空间中的对象属性。您无法将其与 string 进行比较"NaN"
。
请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN
这是一个特例,NaN 是 Javascript 中唯一不等于自身的东西。
尽管关于字符串与 NaN 对象的其他答案也是正确的。
NaN
是不等于自身的对象的少数例子之一。事实上,这个属性是用来实现通用bool IsNaN(number)
方法的:
function isNaN(x)
{
return x != x;
}
Number
(由 ParseFloat 返回)与string
string
转换为Number
NaN
不等于任何其他对象(包括NaN
)你得到NaN==NaN
。根据第二条规则,这是错误的。