javascript中任何数字与nan进行加、减、乘、除等算术运算结果一律为nan,因其语义为“非有效数字”,参与运算即污染结果;且nan不等于任何值(包括自身),须用number.isnan()安全检测。

JavaScript 中,任何数字与 NaN 进行加、减、乘、除等算术运算,结果**一律为 NaN**。这是由 JavaScript 的类型转换规则和 NaN 的语义决定的——NaN 表示“不是一个有效数字”,它不等于任何值(包括自身),且参与任何数学运算都会污染结果。
加法(+):数字 + NaN = NaN
即使左边是正常数字,只要操作数中有一个是 NaN,加法结果就是 NaN。注意:这里指算术加法,不是字符串拼接(若其中一个是字符串,会触发隐式类型转换,可能得到字符串结果,但那已不属于纯数字运算)。
-
5 + NaN→NaN -
NaN + 0→NaN -
NaN + NaN→NaN
减法(−)、乘法(*)、除法(/):全部返回 NaN
这三类运算同样遵循“一染俱染”原则。只要任一操作数为 NaN,结果无条件为 NaN,不区分正负、大小或是否为零。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
10 - NaN→NaN -
3 * NaN→NaN -
NaN / 7→NaN -
0 / 0→NaN(因为 0/0 在数学上无定义)
为什么会出现 NaN?常见源头要留意
NaN 通常不是手动写的,而是计算过程中“失控”产生的。典型场景包括:
- 对非数字值进行数学运算,如
parseInt("abc")返回NaN,后续再参与计算 - 调用
Number()或一元加号+转换失败,如Number("hello")→NaN - 数学函数输入非法,如
Math.sqrt(-1)、Math.log(-5) - undefined、null 或空字符串参与算术运算(部分情况会转成 0 或空,但组合不当仍得 NaN)
如何安全处理?检查 NaN 是关键
不能用 == 或 === 判断 NaN(因为 NaN !== NaN)。正确方式是:
- 使用
isNaN(value)(兼容性好,但会强制转换,如isNaN("123")返回false) - 更推荐
Number.isNaN(value)(只对真正NaN返回true,不会类型转换) - 运算前主动防护:
const result = Number.isNaN(a) || Number.isNaN(b) ? NaN : a + b;
不复杂但容易忽略:只要中间步骤产出 NaN,后面所有依赖它的计算就不可信。养成提前校验的习惯,比事后调试更高效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










