JavaScript 判断是否 NaN 的方法

2022-03-11  乐帮网

javascript

首先我们解释一下它的意义:
NaN在js中的意义. NaN(Not a number)在一般的计算机专业都表示为 非数值类型,或者不可表示的值。在javascript中是一种全局对象的属性,表示这个值不是数字,在js中可以将number对象的值设置为NaN 一般就是表示这个值不是数字或者parsefloat函数不能解析字符串的时候回返回这个值. javaScript 以 NaN 的形式输出 Number.NaN。请注意,NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内。因此,不能与 Number.NaN 比较来检测一个值是不是数字,而只能调用 isNaN () 来比较。 isNaN可以检测一个值是不是数字。

window.isNaN()

注意: window.isNaN 只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,isNaN为true的值,有可能不是NaN,而是一个字符串。(不是数值会先调用 Number 方法转化为数值)

window.isNaN(NaN)  // true
window.isNaN(123)   // false

window.isNaN('Hello')    // true
//相当于
window.isNaN(Number('Hello'))   // true

正确使用方式: 先判断是不是数字,然后再使用 window.isNaN()

function  judgeNaN (value) {
         return (typeof value) === 'number' && window.isNaN(value);
}

judgeNaN(1)          //false
judgeNaN(NaN)          //true
judgeNaN("我是字符串")          //false
judgeNaN([])          //false
judgeNaN({})          //false

Number.isNaN(value)

它的实现是首先判断 value 类型是不是 number; 最后判断 value 是不是 NaN

Number.isNaN(NaN);                      // true
Number.isNaN(Number.NaN);          // true
Number.isNaN(0/0);                          // true

// 下面这些使用 window.isNaN() 将会返回 true ,Number.isNaN() 返回 false,
// 因为 window.isNaN 会先把参数转化为数字类型,再判断是不是 NaN; 而 Number.isNaN 会先判断参数是不是数字类型,不是就返回 false, 是数字类型再进入判断是不是 NaN.
Number.isNaN('NaN');                        // false
Number.isNaN(undefined);                  // false
Number.isNaN({});                                // false
Number.isNaN('blabla');                       // false

// 下面这些 window.isNaN() 和 Number.isNaN() 都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN('37');
Number.isNaN('37.37');
Number.isNaN('');
Number.isNaN(' ')

补充: 老浏览器不支持 Number.isNaN() 我们可以尝试以下两种方法:
方法1 :

         Number.isNaN = Number.isNaN || function(value {
                      return  (typeof value) === 'number' && window. isNaN(value);
          }

方法2 :

    Number.isNaN = Number.isNaN || function(value) {
                       return  value !== value;
           }

最后:其实我们可以利用 NaN 是 JavaScript 之中唯一不等于自身的值 (最简单的办法)

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

judgeNaN(1)                                //false
judgeNaN(NaN)                          //true
judgeNaN( "我是字符串" )          //false
judgeNaN([])                               //false
judgeNaN({})                              //false

https://www.jianshu.com/p/43b383b03ec9

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力