nan不等于自身,需用number.isnan()而非相等运算符判断;isnan()有隐式转换缺陷,number.isnan()更精确;结合typeof和isfinite可全面校验合法数字。

NaN 在 JavaScript 中是个“不等于自己”的特殊值,直接用 == 或 === 判断会失效,容易让条件分支跳过预期逻辑。关键是要用 isNaN() 或更可靠的 Number.isNaN() 来识别它,而不是靠相等比较。
别用相等判断 NaN
NaN 不等于任何值,包括它自己:
-
NaN === NaN返回false -
NaN == NaN也返回false - 所以
if (val === NaN) { ... }永远不会执行
用 isNaN() 要小心类型转换
isNaN() 会先尝试把参数转成数字再判断,导致一些意外结果:
-
isNaN("abc")→true(合理) -
isNaN(" ")→false(空格转为 0) -
isNaN({})→true({}.toString()是"[object Object]",转数字为NaN) -
isNaN(null)→false(null转为0)
这种隐式转换容易掩盖真实意图,不推荐在严格场景下使用。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
优先用 Number.isNaN() 做精确判断
Number.isNaN() 只对真正是 NaN 的值返回 true,不进行类型转换:
-
Number.isNaN(NaN)→true -
Number.isNaN("abc")→false -
Number.isNaN(undefined)→false -
Number.isNaN(0 / 0)→true
适合在计算后立刻验证结果是否有效,比如:
const result = parseFloat(input);<br>
if (Number.isNaN(result)) { /* 输入无效,提示用户 */ }
结合 typeof 和 isFinite 更全面校验
有时你需要的不只是“不是 NaN”,而是“是一个合法数字”:
-
typeof val === 'number'排除非数字类型 -
isFinite(val)排除Infinity、-Infinity和NaN
组合起来:
function isValidNumber(val) {<br>
return typeof val === 'number' && isFinite(val);<br>
}
这样能安全用于数学运算或比较前的兜底检查。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










