NaN是否等于NaN ?
Is NaN equal to NaN?
parseFloat("NaN")
返回"NaN",但是
parseFloat("NaN") == "NaN"
返回false。现在,它返回false可能是件好事,但我不明白这是怎么回事。JavaScript的创建者只是把它作为一个特例吗?否则我就不明白为什么会返回false
更新2
ECMAScript 6新增了Object.is()函数。这被设计为===
检查的进一步增强。这个新函数的好处之一是Object.is(NaN, NaN)
现在将返回true。如果你能够使用ECMAScript 6,那么这将是最具可读性和一致性的解决方案。
正确的检查方法是:
isNaN(parseInt(variable))
如果你检查的是NaN,该函数将返回true。这个方法内置于JavaScript规范中。
使用jQueryjQuery内置了自己的isNaN
函数,最初是为了帮助解决浏览器之间的一些差异,并添加了一些额外的检查,以便他们的版本可以代替在VanillaJS中使用。
jQuery更新
在jQuery 1.7之后,他们将这个函数改为$.isNumeric()
。
交换机文档
如果你看一下这个堆栈溢出问题,你会发现很多时候isNaN()
返回的答案直觉上被认为是"不正确的",但在规范中是正确的。
避免香草isNaN()
的一个重要原因是null
将返回false
,使您认为它是一个数字。但是,jQuery函数涵盖了更大范围的直观结果。
来自他们的文档:
从jQuery 3.0开始,$.isNumeric()只在参数为of时返回true类型number,或者如果它是字符串类型,它可以被强制转换为有限的数量。在所有其他情况下,它返回false。
当JavaScript函数返回NaN
时,这不是一个文字字符串,而是全局空间中的一个对象属性。您不能将它与字符串"NaN"
进行比较。
见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/NaN
这是一种特殊情况,NaN是Javascript中唯一不等于它自己的东西。
尽管其他关于字符串和NaN对象的答案也是正确的
NaN
是为数不多的不等于自身的对象之一。实际上,这个属性就是用来实现常见的bool IsNaN(number)
方法的:
function isNaN(x)
{
return x != x;
}
isNaN
适用于所有非数字的值
isNaN('foo') == true // a string is indeed not a number
isNaN(NaN) == true
isNaN(12) == false
isNaN([1,2,3]) == true // an array is also not a number
如果你想检查NaN
,或者避免类型强制转换,
你可以用Number.isNaN
代替
Number.isNaN('foo') == false
Number.isNaN(NaN) == true
Number.isNaN(12) == false
Number.isNaN([1,2,3]) == false
- 当
Number
(由ParseFloat返回)与string
比较时,string
转换为Number
-
NaN
不等于任何其他对象(包括NaN
)
你得到NaN==NaN
。第二条规则为假
在ECMAScript 6中,Object.is()是===的增强。此方法接受两个参数,如果值相等则返回true。当这两个值具有相同的类型和相同的值时,它们被认为是等价的。这是因为console.log(Object。is(NaN, NaN))--> TRUE
我正在使用Google Apps Script,所以我被ECMA 5卡住了。与电子咖啡的答案类似,以下是我能够弄清楚的,似乎给出了一个确定的答案,即一个值是否实际上是NaN
,而不是如果一个值是NaN
,但如果它实际上是NaN
本身:
function isThisNaN(x)
{
return isNaN(x) && Object.prototype.toString.call(x) === '[object Number]';
}
console.log(isThisNaN(NaN)); // true
对我来说很有趣,Object.prototype.toString.call(NaN)
等于'[object Number]'
。我的新手大脑告诉我,NaN
是"不是一个数字",但遗憾的是,它只是没有那么简单。
编辑:我想我应该说一下我是怎么写这篇文章的。我的想法是一个不包含数字的字符串肯定不会被视为数字…嗯,我最终发现了这个:
isNaN('a'); // true
isNaN(' '); // false
所以即使' '
是一个非数字字符串,它显然被哄成一个数字(0
)。
console.log(Number(' ')); // 0.0
然而…console.log( 0 ? true : false); // false
console.log(' ' ? true : false); // true
在阅读了更多之后,我确实更好地理解了它,但是对于一个新手来说,这是一个多么大的精神风暴啊,哈哈
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- If.else语句检查NaN和空字符串是否在JavaScript中不起作用
- 没有 NaN 的 x === x 返回 false 是否有任何值
- if(x<Infinity)是检查x是否不是NaN并且可以强制为数字的最佳方法
- 如何测试某个事物是否与NaN相同
- Chrome调试器:每次计算Nan或Infinity时,是否可以停止调试器中的脚本
- number * string是NaN,但是当检查NaN是否返回false时
- 如何检查作用域变量是否实际包含NaN ?
- 如何检查数组中是否存在NaN关键字
- NaN是否等于NaN ?
- 解析以检查是否NAN Javascript
- 使用if语句检查是否为NaN
- 如何检查json字符串中是否存在NAN