判断nan应优先使用number.isnan(),它不进行类型转换、语义清晰且准确;若需兼容旧环境,可用value !== value这一自比较特性实现。

NaN 是 JavaScript 中一个特殊的数值,表示“不是一个数字”,但它本身的类型却是 number,这导致直接用 == 或 === 判断会失效——因为 NaN !== NaN 是语言规范定义的。
使用 isNaN() 判断 NaN
isNaN() 是最常用的判断方式,但它有个关键问题:会先尝试把参数转成数字再判断。比如 isNaN("abc") 返回 true,但 isNaN(" ") 或 isNaN("") 却返回 false(因为空字符串和纯空格会被转为 0)。
- 适合简单场景,如已知输入是数字或数字字符串
- 不推荐用于不确定类型的变量,容易误判
使用 Number.isNaN() 更可靠
Number.isNaN() 是 ES6 引入的严格判断方法,它不会做类型转换,只在参数本身就是 NaN 时才返回 true。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Number.isNaN(NaN)→true -
Number.isNaN("abc")→false -
Number.isNaN(undefined)→false - 它是目前判断 NaN 最安全、最语义清晰的方式
利用 NaN 的自比较特性
由于 NaN !== NaN 恒成立,可以借此写一个轻量判断:
function isReallyNaN(value) { return value !== value; }- 这个技巧不依赖任何 API,兼容性极好(所有 JS 环境都支持)
- 但可读性稍差,建议仅在需极致兼容或性能敏感场景使用
避免常见误判操作
以下写法都不能正确识别 NaN:
-
value === NaN—— 永远为false -
typeof value === 'number' && !isFinite(value)—— 会把Infinity和-Infinity也包含进来 -
!value或value == null—— NaN 是真值,且不等于null或undefined
实际开发中优先用 Number.isNaN(),既准确又直观;若需兼容老环境,可封装一个 polyfill 或用 value !== value 作为替代。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










