NaN 在 JavaScript 中的数据类型是 number,因为它是数值类型中的特殊值,用于表示无效数值运算结果,与 Infinity 等同属 number 类型。

NaN 在 JavaScript 中的数据类型是 number。
为什么 typeof NaN 返回 "number"
NaN(Not-a-Number)是 JavaScript 中一个特殊的数值字面量,用于表示本应返回数字却无法计算出有效数字的结果(比如 0 / 0、Math.sqrt(-1))。它被设计为 number 类型的一个“异常值”,就像 Infinity 和 -Infinity 一样,都属于 number 类型。
所以:
-
typeof NaN→"number" -
typeof Infinity→"number" -
typeof 42→"number"
不能用 == 或 === 判断 NaN
NaN 是唯一一个不等于自身的值:
立即学习“Java免费学习笔记(深入)”;
-
NaN === NaN→false -
NaN == NaN→false -
Object.is(NaN, NaN)→true(ES6 新方法)
因此,判断一个值是否为 NaN,**不要用相等比较**,而要用专门的方法。
正确判断 NaN 的方法
推荐使用以下两种方式:
-
Number.isNaN(value):严格判断,只对真正传入的NaN返回true;不会尝试类型转换(比如Number.isNaN("abc")→false) -
isNaN(value):旧方法,会先调用Number(value)转换再判断,有隐式转换副作用(比如isNaN("abc")→true,因为Number("abc")是NaN)
日常开发中优先用 Number.isNaN(),更安全、语义更清晰。
小结:NaN 的本质
NaN 是一个 number 类型的特殊值,不是对象、不是字符串、也不是 undefined 或 null。它的存在是为了在数值运算中表示“计算失败”,但仍在数值域内。理解这点,就能明白为何 typeof 返回 "number",也更能合理使用 Number.isNaN() 做检测。


















