什么
首先我们来了解一下NaN是什么?
NaN是全局对象的一个属性,意思是“不是数字”,即Not-A-。 初始值为NaN,与.NaN的值相同。
同时,NaN属性是不可配置()、不可写()、不可枚举()的属性。
NaN一般不会在工作中直接使用。 它更常见于 Math 的返回值或尝试将字符串解析为数字但失败时。
为什么
当我们需要判断值是否相等时,通常使用以下四种方法来判断:
if(param1 == param2) {
// do someting
}
if(param1 != param2) {
// do someting
}
if(param1 === param2) {
// do someting
}
if(param1 !== param2) {
// do someting
}
然而,这些方法都不适用于 NaN。
1 === NaN; // false
'hello world' === NaN; // false
Number.NaN === NaN; // false
NaN === NaN; // false
因为无论你将 NaN 与什么值进行比较,结果都将是 false,即使将 NaN 与它本身进行比较,结果也将是 false。
如何
那么如何判断一个变量是否为NaN呢?
js提供了两个函数来判断,.isNaN()和isNaN()
还有另一种方法。 由于 NaN 是目前唯一不等于自身的值,因此我们还可以通过类似于以下代码的方法来判断变量“x”是否为 NaN。
function isNaN(x) {
return x != x;
}
必须要注意的是
isNaN()首先判断参数是否为类型。 如果不是类型,则会尝试将参数转换为Numbe类型,然后判断是否为NaN。
并且.isNaN()不会强制转换参数,只有当参数为NaN时才会返回true。
兼容性方面,.isNaN()是es6中才添加的,不支持IE及部分低版本浏览器。 isNaN 支持几乎所有浏览器。
首发于:瓜地内容创作平台