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