nan 不等于任何值,包括自身:nan === nan 为 false,nan == nan 为 false,nan > 5 为 false,nan = 0 为 false。

NaN 和任何数(包括它自己)比较,结果都是 false。
NaN 不等于任何值,包括自身
这是 NaN 最关键的特性:它不等于任何东西,哪怕是另一个 NaN。
-
NaN === NaN→ false -
NaN == NaN→ false -
NaN > 5→ false NaN → <strong>false</strong>-
NaN >= 0→ false NaN → <strong>false</strong>
判断一个值是否为 NaN 的正确方法
不能用 == 或 === 判断,必须使用专门的方法:
-
isNaN(value):会先尝试把 value 转成数字,再判断(有隐式转换,可能误判,比如isNaN(" ")返回 true) -
Number.isNaN(value):更严格,只对真正是 NaN 的值返回 true,推荐使用 -
value !== value:利用 NaN 是唯一不等于自身的值这一特性,可作为底层判断技巧(但可读性差,不建议日常使用)
常见误判场景
很多人会写 if (x === NaN) 来检测,这永远不成立。
- 错误:
if (result === NaN) { /* 不会执行 */ } - 正确:
if (Number.isNaN(result)) { /* 安全检测 */ } - 也正确:
if (isNaN(result)) { /* 兼容老环境,但注意类型转换 */ }
为什么设计成这样?
NaN 表示“不是一个有效数字”,它代表的是未定义或不可表示的计算结果(如 0/0、Math.sqrt(-1))。既然含义是“未知数值”,那么两个未知值之间就无法确定大小或相等关系,所以所有比较都返回 false 是符合语义的。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











