NaN
全局属性NaN,一个不是数字的数字;可能比较难以理解,可以将其理解为“无效的数值”;
为什么说NaN是一个不是数字的数字?
typeof NaN === 'number'; // true复制代码
NaN用来表示失败的数学运算;
let a = 1 / 'foo';
console.log(a); // NaN
typeof a === 'number'; // true复制代码
如何检测NaN?
- NaN不等于自身,NaN是JavaScript中唯一一个不等于自身的值;
let a = NaN;
a == NaN; // false
a === NaN; // false复制代码
- isNaN意外的问题;
let a = 2 / 'foo';
isNaN(a); // true
a = 'foo';
isNaN(a); // true => what复制代码
- 非数字类型使用isNaN时,JavaScript会默认先将其转换为数字类型,再使用isNaN检验;
let a = '123';
isNaN(a); // Number(a) => 123 => isNaN(a) => false
a = 'hi';
isNaN(a); // Number(a) => NaN => isNaN(a) => true复制代码
- 正确的方式(NaN是JavaScript中唯一一个不等于自身的值);
window.isNaN = function (n) {
return n !== n;
}复制代码