你如何在 JavaScript 中测试 NaN?
IT技术
javascript
nan
2021-01-17 02:55:14
2个回答
简答
对于 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;
}
注意:我更喜欢使用 #1 进行测试,它在所有地方都相同,并且也不依赖于最新的 JS。(它总是给我正确的结果。没有惊喜!)
详细说明:
这是我们很棒的 NaN
NaN == NaN; // false
NaN === NaN; // false
请不要JavaScript
为此责怪,NaN 应该在其他语言中也以这种方式行事,根据所有比较返回错误 NaN 值的基本原理,这很好
所以isNaN
作为我们的救星来了,但是在某些情况下它的行为几乎没有什么不同,比如
isNaN(undefined); // true
isNaN({}); // true
isNaN("lorem ipsum"); // true
看到上面的结果,我有一些奇怪的面孔。这是来自 MDN 的原因
当 isNaN 函数的参数不是 Number 类型时,该值首先被强制转换为 Number。然后测试结果值以确定它是否为 NaN。
那么我们应该如何测试非数字变量的 NaN 呢?我总是按照以下方式进行
if(x !== x) {
console.info('Is a NaN');
}
else {
console.info('Not a NaN');
}
ECMAScript-6/JavaScript-2015 更新
我们在 ECMAScript-6 中有什么相同的东西吗?是的,我们确实...
Number.isNaN(x); // true
ES6 实现也将有助于上述情况,如
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN("lorem ipsum"); // false
而 ECMAScript-5 全局函数isNaN
输出在true
上述情况下,有时可能与我们的预期不一致。
如果你仔细阅读,这个问题就会有答案。这就是我找到它的方式:我正在输入问题并......宾果游戏。
你还记得我写的“NaN
就像 SQL 中的 NULL,它不等于任何东西,甚至它本身”?据我所知,NaN
是 Javascript 中具有此属性的唯一值。因此你可以写:
var reallyIsNaN = function(x) {
return x !== x;
};
其它你可能感兴趣的问题