NaN isNaN Number.isNaN

NaN

not a number 不是一个数字的数值
在项目中,会遇到计算数量,价格的需求。在获取的字符串类型的数量,忘记转成数字类型。一般都是,数字与非数字类型的计算,就会出现NaN这样的情况

[a, b] = [1, 'a1']
console.log(a * b) // NaN
isNaN()

确定一个值是否为NaN
由于 NaN == NaN // false,因此才推出了isNaN()
先Number()方法尝试转换参数的类型为Number,为了方便记忆, not a number 返回 true,自己是这么记的
这里就引用官方的例子了

isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({});        // true

isNaN(true);      // false
isNaN(null);      // false
isNaN(37);        // false

// strings
isNaN("37");      // false: 可以被转换成数值37
isNaN("37.37");   // false: 可以被转换成数值37.37
isNaN("37,5");    // true
isNaN('123ABC');  // true:  parseInt("123ABC")的结果是 123, 但是Number("123ABC")结果是 NaN
isNaN("");        // false: 空字符串被转换成0
isNaN(" ");       // false: 包含空格的字符串被转换成0

// dates
isNaN(new Date());                // false   new Date() 返回的是 Object,在number(new Date()) //返回的时间戳 1595301312801
isNaN(new Date().toString());     // true     

isNaN("blabla")   // true: "blabla"不能转换成数值
                  // 转换成数值失败, 返回NaN
Number.isNaN()

方法确定传递的值是否为 NaN,并且检查其类型是否为 Number,
只验证参数是否为NaN,不会调用Number()方法去转换

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

// 下面这几个如果使用全局的 isNaN() 时,会返回 true。
Number.isNaN("NaN");      // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
Number.isNaN(undefined);  // false
Number.isNaN({});         // false
Number.isNaN("blabla");   // false

// 下面的都返回 false
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN(37);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");

isNaN()和Number.isNaN()之间的区别:如果当前值是NaN,或者将其强制转换为数字后将是NaN,则前者将返回true。而后者仅当值当前为NaN时才为true

isNaN('test');  // true
isNaN(NaN);  // true
Number.isNaN('test');  // false
Number.isNaN(NaN);  // true
参考资料

有兴趣的同学也可以试着看看英文文档
NaN
isNaN

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容