JavaScript Guidebook

JavaScript 完全知识体系

NaN

全局属性 NaN 的值表示不是一个数字(Not-A-Number)。

属性特性布尔值
writablefalse
enumerablefalse
configurablefalse

说明

  • NaN 是一个全局对象的属性。
  • NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样。
  • 编码中很少直接使用到 NaN。通常都是在计算失败时,作为 Math 的某个方法的返回值出现的(例如:Math.sqrt(-1))或者尝试将一个字符串解析成数字但失败了的时候(例如:parseInt('blabla'))。

返回 NaN 的情况总结:

  • 无穷大除以无穷大
  • 给任意负数做开放运算
  • 算术运算符与不是数字或无法转换为数字的操作数一起使用
  • 字符串解析为数字

示例

值校验

不可使用等号运算符来判断一个值是否为 NaN。必须采用 Number.isNaN()isNaN()函数进行判断。

在执行自比较中,NaN 是唯一与自身不全等的值。

NaN === NaN;
// false
Number.NaN === NaN;
// false
isNaN(NaN);
// true;
isNaN(Number.NaN);
// true;
function valueIsNaN(v) {
return v !== v;
}
valueIsNaN(1);
// false
valueIsNaN(NaN);
// true
valueIsNaN(Number.NaN);
// true

使用 isNaN() 前先检查一下这个值是否是数字类型,即可避免隐式类型转换的问题。

function detectIsNaN(value) {
return typeof value === 'number' && isNaN(value);
}