NaN: 全称为 not a number,理解为不是一个数值。表示一个存储数据的数据类型。
1. Number()
总结
- true 和 false ---> 转化为数字1和0
- null、空数组[]、空字符串'' 、空格字符串' ' --->转化成数字0
- 空对象{}、undefined、非数字字符串--->转化成 NaN
- 空字符串,空格字符串,数字字符串 --->转化为数值
- 对于数组的话,看如下
2. isNaN()
结论:对于可以被Number转换为数值的值x,那么isNaN(x)就是false,如果不可以被Number转换为数值的y,那么isNaN(y)就是true。
对于 Date() 这种特殊对象来说:
3. NaN值
NaN值产生:当算法运算返回一个未定义的或无法表示的值,NaN就产生了。但NaN并不一定用于表示某些值超出表示范围的情况,将某些不能强制转化为数值的非数值转化为数值的时候,也会得到NaN。
例如,0除以0会返回NaN ---- 但是其他数除以0则不会返回NaN
4. isNaN()和Number.isNaN()区别:
- isNaN的本意是:通过Number()方法尝试将参数转换成Number类型,如果成功返回false,失败返回true,即isNaN只是判断传入的参数是否能转换为数字,并不是严格的判断是否等于NaN。
- Number.isNaN 是判断传入的参数是否严格等于NaN(也就是 ===)
(ES6中 Number.isNaN() 用来判断是否属于数字)
- isNaN()与Number.isNaN()最大的区别: Number.isNaN()不存在类型转换的行为
其他注意点
- NaN == NaN --> false
原因: javaScript规定:NaN表示的是非数字,那么这个非数字可以是不同的数字,因此NaN不等于NaN。注:两个NaN永远不相等
- 有非数值参加运算,结果都是NaN
- 如果是 +运算 ,则进行字符串拼接操作