定义
NaN是一个特殊的数字值(
typeof NaN
的结果为number
),是not a number
的缩写,表示不是一个合法的数字。
注意点
NaN最大的怪癖是唯一一个和自身不相等的值
NaN === NaN // false
如何辨别NaN
isNaN() 是一个全局方法,它的作用是检查一个值是否能被 Number() 成功转换 。 如果能转换成功,就返回 false,否则返回 true 。
另外,ES6 在 Number 对象上也提供了 isNaN() 方法,和全局方法 isNaN() 不同的是,它用于判断某个值本身是否为 NaN,而不需要进行类型转换。
/*isNaN()方法*/
isNaN(NaN) // true 不能转换
isNaN(true) // false 能转换
isNaN(123) // false 能转换
isNaN('123') // false 能转换
isNaN('abc') // true 不能转换
isNaN('123ab') // true 不能转换
isNaN('123.45abc') // true 不能转换/*Number.isNaN()方法*/
Number.isNaN(false) // false 本身不是NaN
Number.isNaN(123) // false 本身不是NaN
Number.isNaN('123') // false 本身不是NaN
Number.isNaN('abc') // false 本身不是NaN
Number.isNaN(NaN) // true 本身是NaN
扩展
当然想确定一个值是否为
NaN
,可以使用以下两种方法:
- 方法一:将
isNaN()
和typeof
结合来判断
function isValueNaN(value) {return typeof value === 'number' && isNaN(value)
}
- 方法二:值是否与本身不相等(
NaN
是唯一有这样特征的值)
function isValueNaN(value) {return value !== value
}
注:本人前端小白 ,如有不对的地方还请多多指教