Number.isNaN 更严格精准,只对真正的 NaN 返回 true;而全局 isNaN() 会先强制类型转换再判断,导致空格、空字符串、undefined 等误判为 NaN,故推荐优先使用 Number.isNaN()。

Number.isNaN 更严格,只对 NaN 返回 true;而全局 isNaN() 会先尝试把参数转成数字再判断,容易误判。
为什么全局 isNaN 不可靠
它会对非数字类型做隐式转换,导致一些意外结果:
-
isNaN("abc")→true(合理) -
isNaN(" ")→false(空格转为0,不是NaN) -
isNaN("")→false(空字符串转为0) -
isNaN(undefined)→true(转成NaN) -
isNaN({})→true(对象转字符串再转数字失败)
这些都不是真正意义上的 NaN 值,只是转换过程出错了。
Number.isNaN 的行为更精准
它不做任何类型转换,只检查传入的值是否**就是** NaN:
立即学习“Java免费学习笔记(深入)”;
-
Number.isNaN(NaN)→true -
Number.isNaN(0 / 0)→true -
Number.isNaN("abc")→false(字符串不是NaN) -
Number.isNaN(undefined)→false -
Number.isNaN(null)→false -
Number.isNaN({})→false
这才是你真正想检测“这个值是不是 IEEE 754 的 NaN”的方式。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
实际使用建议
如果你要检查一个变量是否为 NaN,直接用 Number.isNaN():
function isValidNumber(value) {
return typeof value === 'number' && !Number.isNaN(value);
}
<p>// 或者单独判断 NaN
if (Number.isNaN(someValue)) {
console.log('确实是 NaN');
}
如果需要兼容老环境(如 IE),可以加一层 polyfill:
if (!Number.isNaN) {
Number.isNaN = function(value) {
return typeof value === 'number' && value !== value;
};
}
利用了 NaN 是唯一不等于自身的值这一特性。
别混淆:isNaN 和 Number.isNaN 的用途不同
全局 isNaN() 适合“我传了个东西,想知道它能不能被解释成有效数字”这种宽松场景;Number.isNaN() 适合“我确认这是个数字类型,只想知道它是不是 NaN”这种精确判断。
多数现代代码中,尤其在类型已知或做过 typeof x === 'number' 检查后,应该优先用 Number.isNaN()。

















