isNaN()详解以及isNaN()和Number.isNaN()区别

isNaN用法:

我们先来看一组结果:
在这里插入图片描述
其中,true和false都可以被Number转换成数字1和0
null和空数组[]可以被Number转换为数字0
对象{}和undefined不可以被Number转换成数字,返回NaN
对于空字符串或者空格字符串或者数字字符串,可以被Number转换为数值
对于数组:
在这里插入图片描述
所以我们大概知道哪些值可以被Number转换为数字,哪些不可以,可以简单理解为:

对于可以被Number转换为数值的值x,那么isNaN(x)就是false
如果不可以被Number转换为数值的值y,那么isNaN(y)就是true

在这里插入图片描述
对于Date()这种特殊对象:
在这里插入图片描述
new Date()是可以被Number转化为数值的,所以isNaN(new Date()) === false
在这里插入图片描述
new Date().toString()返回的是格式化的字符串,不能被Number转化为数值,所以isNaN(new Date().toString()) === true
在这里插入图片描述
注意:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

isNaN()和Number.isNaN()区别

当我们向isNaN传递一个参数,它的本意是通过Number()方法尝试将这参数转换成Number类型,如果成功返回false,如果失败返回true。
所以isNaN只是判断传入的参数是否能转换成数字,并不是严格的判断是否等于NaN

Number('测试') // 输出NaN
// 因为没有将“测试”成功转换成Number类型,所以下面代码输出true
console.log(isNaN('测试')) //  true

Number.isNaN判断传入的参数是否严格的等于NaN(也就是 ===)。

那一般在什么情况下会用到Number.isNaN呢?

当两个变量进行运算时,我们可以使用Number.isNaN来判断它的值是否为NaN:

console.log(Number.isNaN(2/'测试')); //  输出true

Number.isNaN与isNaN最的区别是,Number.isNaN不存在类型转换的行为。

console.log(isNaN('测试')) //true
console.log(Number.isNaN('测试')) //false

上面代码中,都是传入字符串“测试”,但为什么结果不同?原因在于:

isNaN会通过Number方法,试图将字符串"测试"转换成Number类型,但转换失败了,因为 Number(‘测试’) 的结果为NaN ,所以最后返回true。

而Number.isNaN方法,只是严格的判断传入的参数是否全等于NaN( ‘测试’ === NaN) ,字符串当然不全等于NaN啦,所以输出false。

猜你喜欢

转载自blog.csdn.net/dyw3390199/article/details/114522813
今日推荐