1. NaN是什么?
NaN全称是Not-A-Number(不是一个数字),我们可以通过Number.NaN来获得一个NaN,在类型转换失败时,我们常常会得到一个NaN,需要注意的是,NaN是JS中唯一一个自身不相等的存在。
Number.NaN //NaN
NaN === NaN //false
那为什么NaN!==NaN?
NaN 只是Number 的一个静态属性
Number('echo') //NaN
Number('undefined') //NaN
Number(undefined) //NaN
2. 什么情况会产生 NaN 呢?
当Number提供的类型转换方法在解析一个值却无法返回数字时:
Number('echo') //NaN
parseInt('echo123') //NaN
parseInt('123echo') //123
parseFloat('时间跳跃123.1') //NaN
parseFloat('123.1时间跳跃') //123.1
计算中使用- / *运算符,参与计算的值转换类型失败时:
- '听风是风' //NaN
* '123时间跳跃' //NaN
/ 'echo123' //NaN
特别注意,两个数字0相除也会得到NaN
0 / 0 //NaN
3. 如何判断一个值是 NaN
NaN是唯一一个与自身不相等的特殊值,如果你觉得Number.isNaN存在兼容问题,也可以利用这个特点自己定义验证方法:
const ISNAN = (value) => value !== value;
ISNAN('听风是风'); //false
ISNAN(123); //false
ISNAN(NaN); //true