nan !== nan 是 javascript 规范定义的特殊行为,正确判断应使用 number.isnan()(推荐,不转换类型)或 isnan()(慎用,会隐式转换),旧环境可用 value !== value 代替。

JavaScript 中 NaN !== NaN 是语言规范定义的特殊行为,不能用常规相等运算符判断 NaN。正确方法是使用 Number.isNaN() 或全局 isNaN(),但二者有关键区别。
推荐:用 Number.isNaN() 精准判断
Number.isNaN() 只在参数严格等于 NaN 时返回 true,不会进行类型转换,更安全可靠:
-
Number.isNaN(NaN)→ true -
Number.isNaN(0 / 0)→ true -
Number.isNaN("NaN")→ false(字符串不转数字) -
Number.isNaN(undefined)→ false -
Number.isNaN(null)→ false
慎用:全局 isNaN() 会隐式转换
isNaN() 会先尝试把参数转为数字再判断,容易产生误导:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
isNaN("NaN")→ true(转成 NaN 后判断) -
isNaN("abc")→ true(转成 NaN) -
isNaN({})→ true({}→"[object Object]"→NaN) -
isNaN("123")→ false(转成 123)
除非你明确需要这种宽松转换逻辑,否则不建议用于数据校验。
兼容旧环境的替代写法
若需支持非常老的浏览器(如 IE8),可利用 NaN !== NaN 这一特性手动判断:
function myIsNaN(value) { return value !== value; }- 这个技巧只对 NaN 有效,因为只有 NaN 满足“不等于自身”
- 其他值(
undefined、null、0、""等)都不满足该条件
实际使用建议
日常开发中优先选择 Number.isNaN():
- 做数值计算后校验结果是否异常,例如:
const result = Math.sqrt(-1); if (Number.isNaN(result)) { /* 处理无效开方 */ } - 配合
typeof x === 'number'使用,确保变量确实是数字类型再判断是否为 NaN - 避免用
==或===直接比较x === NaN—— 永远返回 false
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










