美文网首页
js中NaN的判断

js中NaN的判断

作者: 非典型程序猿404 | 来源:发表于2019-12-19 17:45 被阅读0次

    1.NaN是什么?

    NaN全称是Not-A-Number(不是一个数字)。

    我们可以通过Number.NaN来获得一个NaN,在类型转换失败时,我们常常会得到一个NaN。

    需要注意的是,NaN是JS中唯一一个自身不相等的存在。

    Number.NaN     //NaN

    NaN === NaN     //false

    2.为什么NaN!==NaN?

    NaN只是Number上的一个静态属性。

    Number('echo')         //NaN

    比如Number('echo')会得到NaN,它只是为了告诉你这个值不是一个数字,一种表示方法,而非一个精准有效的值,因此NaN不能参与计算,也无法与自身比较。

    3.什么情况下产生NaN

    A、当Number提供的类型转换方法在解析一个值却无法返回数字时:

    Number('echo')    //NaN

    parseInt('echo123')    //NaN

    parseInt('123echo')       //123

    parseFloat('时间跳跃123.1')          //NaN

    parseFloat('123.1时间跳跃')           //123.1

    B、计算中使用-  /   *运算符,参与计算的值转换类型失败时:

    1 - '听风是风'       //NaN

    1 * '123时间跳跃'       //NaN

    1 / 'echo123'          //NaN

    C、特别注意,两个数字0相除也会得到NaN:

    0 / 0     //NaN

    4.isNaN方法的含义,如何判断一个值严格等于NaN

    A、isNaN()

    window上有一个全局方法isNaN(),可能大分部人认为此方法为判断一个值是否等于NaN,这是因为is NaN直译就是“是不是NaN”所带来的误解,其实本意不是这样:

    isNaN(123)            //false

    isNaN('123时间跳跃')       //true

    isNaN(NaN)      //true

    当我们向isNaN传递一个参数,它的本意是通过Number()方法尝试转换参数的类型为Number,如果转换成功返回false,否则转返回true。

    它只是判断这个参数能否转成数字而已,并不是判断是否严格等于NaN

    所以当你要判断某个值是否严格等于NaN时无法使用isNaN()方法,毕竟你传递任意字符串它都会返回true。

    B、Number.isNaN()

    ES6中提供了一个Number.isNaN()方法用于判断一个值是否严格等于NaN:

    Number.isNaN(NaN)     //true

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

    isNaN(NaN)      //true

    Number.isNaN(NaN)     //true

    isNaN('听风是风')       //true

    Number.isNaN('听风是风')     //false

    C、自定义方法

    我们前面说过,NaN是唯一一个与自身不相等的特殊值,如果你觉得Number.isNaN存在兼容问题,也可以利用这个特点自己定义验证方法:

    const ISNAN = (value) => value !== value;

    ISNAN('听风是风');    //false

    ISNAN(123);       //false

    ISNAN(NaN);        //true

    相关文章

      网友评论

          本文标题:js中NaN的判断

          本文链接:https://www.haomeiwen.com/subject/ggcvnctx.html