js如何判断NaN的

window上的全局方法isNaN()
大家会认为这是判断一个值是等于NaN,其实不是这样:

isNaN(123) //false
isNaN('123') //false
isNaN('123抵达的') //true
isNaN(NaN) //true

来看例子2和3,我们可以发现isNaN()方法的原理
当我们向isNaN传递一个参数,原理是通过Number()方法尝试转换参数的类型为Number,如果转换成功返回false,否则返回true
它只是判断这个参数能否转成数字而已,并不是判断是否严格等于NaN。
所以当你要判断某个值是否严格等于NaN时,无法使用isNaN()方法,因为传递任意无法转换成数字的字符串它都会返回true

解决方案:
1.利用NaN是唯一一个与自身严格不相等的值:

function myIsNaN(value) { 
    return value !== value; 
} 

2.在使用isNaN()之前先检查一下这个值是不是数字类型,这样就避免了隐式转换的问题:

function myIsNaN(value) { 
    return typeof value === 'number' && isNaN(value); 
} 

3.使用ES6提供的方法

Number.isNaN('123f')//false

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

判断两个NaN如何相等

Object.is(NaN, NaN);// true
全部评论

相关推荐

2024-12-13 17:03
门头沟学院 Java
点赞 评论 收藏
分享
2024-12-06 10:44
东北财经大学 运营
在拧螺丝的西红柿很热情:工作量数据化,你的实习我只看到了一个30%,比如总浏览量十万加,同比增长20%,用户复购率达到70%等等,自己根据你当时的工作情况挖掘吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务