nan 是 javascript 中表示“非数字”的特殊数值,属 number 类型,源于 ieee 754 标准;因 nan ≠ nan,须用 number.isnan() 或 isnan() 检测,前者严格,后者会先转类型。

NaN 是 JavaScript 中一个特殊数值,全称 Not-a-Number,表示“非数字”,但它本身属于 number 类型。它不是语法错误或运行时异常,而是 IEEE 754 浮点标准定义的合法值,用于标记数学上未定义或不可表示的结果。
NaN 的典型产生场景
它常出现在以下几类操作中:
- 无效数学运算:如
0 / 0、Infinity - Infinity、Math.sqrt(-1) - 失败的类型转换:
Number("abc")、parseInt("hello")、parseFloat("") - 参与 NaN 的运算:
NaN + 1、NaN * 5等结果仍是 NaN(具有传播性) - 某些边界输入:
Number(undefined)、Number({})也会得到 NaN
为什么不能用 === 检测 NaN
因为 NaN 是唯一不等于自身的值:NaN === NaN 返回 false。这是它的核心特性,也是所有检测方法的出发点。直接用相等比较永远失败,必须依赖专门机制。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
正确检测 NaN 的两种推荐方式
现代 JavaScript 提供两个主流方法,关键区别在于是否做隐式类型转换:
-
Number.isNaN(value):严格检测。只在value本身就是 NaN 类型时返回true;对字符串、null、undefined 等一律返回false。✅ 推荐用于精确判断 -
isNaN(value):宽松检测。会先调用Number(value)尝试转数字,再判断结果是否为 NaN。例如isNaN("abc")→Number("abc")是 NaN → 返回true;但isNaN(null)→Number(null)是0→ 返回false。⚠️ 容易误判,慎用于输入校验
实际应用中的健壮检测写法
仅判断是否为有效数字,需同时排除 NaN 和无穷大:
function isValidNumber(value) {
return typeof value === 'number' &&
!Number.isNaN(value) &&
isFinite(value);
}
这个组合能准确识别:正常数字 ✅、NaN ❌、Infinity ❌、-Infinity ❌、null ❌、"123" ❌(类型不符)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










