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
全部评论

相关推荐

点赞 评论 收藏
分享
01-17 12:35
吉首大学 Java
秋招之BrianGriffin:自己的工作自己做!😡
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务