我只在 Firefox 的 JavaScript 控制台中尝试过,但以下语句均不返回 true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
我只在 Firefox 的 JavaScript 控制台中尝试过,但以下语句均不返回 true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
我刚刚在Effective JavaScript一书中发现了这种非常简单的技术:
由于 NaN 是唯一被视为不等于自身的 JavaScript 值,因此您始终可以通过检查值是否与自身相等来测试该值是否为 NaN:
var a = NaN;
a !== a; // true
var b = "foo";
b !== b; // false
var c = undefined;
c !== c; // false
var d = {};
d !== d; // false
var e = { valueOf: "foo" };
e !== e; // false
直到@allsyed 发表评论才意识到这一点,但这在 ECMA 规范中:https ://tc39.github.io/ecma262/#sec-isnan-number
使用此代码:
isNaN('geoff');
请参阅isNaN()
MDN 上的文档。
alert ( isNaN('abcd')); // alerts true
alert ( isNaN('2.0')); // alerts false
alert ( isNaN(2.0)); // alerts false
至于要测试Number类型的值是否为 a NaN
,全局函数isNaN
将完成这项工作
isNaN(any-Number);
对于适用于 JS 中所有类型的通用方法,我们可以使用以下任何一种方法:
对于 ECMAScript-5 用户:
#1
if(x !== x) {
console.info('x is NaN.');
}
else {
console.info('x is NOT a NaN.');
}
对于使用 ECMAScript-6 的人:
#2
Number.isNaN(x);
并且为了在 ECMAScript 5 和 6 中保持一致性,我们也可以将这个polyfill 用于 Number.isNan
#3
//Polyfill from MDN
Number.isNaN = Number.isNaN || function(value) {
return typeof value === "number" && isNaN(value);
}
// Or
Number.isNaN = Number.isNaN || function(value) {
return value !== value;
}
请查看此答案以获取更多详细信息。
从ES6 开始,Object.is(..)
是一个新的实用程序,可用于测试两个值的绝对相等性:
var a = 3 / 'bar';
Object.is(a, NaN); // true