1. 两者的区别
isNaN()函数
在判断是否为NaN时,需要先进行数据类型转换
,只有在无法转换为数字时才会返回true
;
Number.isNaN()函数
在判断是否为NaN时,只需要判断传入的值是否为NaN,不会进行数据类型转换。
关键词:数据类型转换
2. 实例
2.1 isNaN()函数
结果为true
的情况
isNaN(NaN) //true
isNaN(undefined) //true
isNaN({}) //true
isNaN("JavaScript") //true
isNaN(new Date().toString) //true 返回的是一串字符串表示的时间,无法转换成数值类型
结果为false
的情况
isNaN(123) //false
isNaN(true)//false
isNaN(false)//false
isNaN("1")//false
isNaN(") //false 转换为0
isNaN(new Date())//false 时间戳
2.2 Number.isNaN()函数
ES6中的Number.isNaN()函数
会在真正意义上去判断变量是否为NaN
,不会做数据类型转换。只有在传入的值为NaN
时,才会返回true
,传入其他任何类型的值时会返回false
。
只存在一种结果为true
的情况,即传入的值为NaN
时。
Number.isNaN(NaN) //true
兼容性处理
如果在非ES6环境中想用ES6中的isNaN()函数
,可参考以下兼容性处理方案。
if(!Number.isNaN){
Number.isNaN = fucntion(n){
return n != n;
}
}
在所有类型的数据中,如果一个变量和自身作比较,只有在变量值为NaN
时才会返回false
,其他情况都是返回true
。所以n !== n
返回true
,只有在n为NaN
的时候才成立。