isNaN()
isNaN
方法可以用来判断一个值是否为NaN
。
1 | isNaN(NaN) // true |
但是,isNaN
只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN
,所以最后返回true
,这一点要特别引起注意。也就是说,isNaN
为true
的值,有可能不是NaN
,而是一个字符串。
1 | isNaN('Hello') // true |
出于同样的原因,对于对象和数组,isNaN
也返回true
。
1 | isNaN({}) // true |
但是,对于空数组和只有一个数值成员的数组,isNaN
返回false
。
1 | isNaN([]) // false |
上面代码之所以返回false
,原因是这些数组能被Number
函数转成数值。
因此,使用isNaN
之前,最好判断一下数据类型。(下面这两个例子, 只是判断是不是 NaN, 而不是判断 是数字, 还是非数字)
1 | function myIsNaN(value) { |
判断NaN
更可靠的方法是,利用NaN
为唯一不等于自身的值的这个特点,进行判断。
1 | function myIsNaN(value) { |
Number.isNaN()
Number.isNaN() 方法确定传递的值是否为 NaN
和其类型是 Number
。它是原始的全局isNaN()
的更强大的版本。
1 | function typeOfNaN(x) { |
示例
1 | Number.isNaN(NaN); // true |