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