Number.isNaN()
Number.isNaN() 静态方法用于确定传入的值是否为数字值 NaN,如果输入不是 Number 类型,则返回 false。它是比原始的全局 isNaN() 函数更健壮的版本。
试一试
function typeOfNaN(x) {
if (Number.isNaN(x)) {
return "Number NaN";
}
if (isNaN(x)) {
return "NaN";
}
}
console.log(typeOfNaN("100F"));
// Expected output: "NaN"
console.log(typeOfNaN(NaN));
// Expected output: "Number NaN"
语法
js
Number.isNaN(value)
参数
返回值
如果给定值为数值 NaN,则返回布尔值 true。否则返回 false。
描述
Number.isNaN() 函数提供了一种方便的方式来检查是否等于 NaN。请注意,您不能使用 == 或 === 运算符来测试是否等于 NaN,因为与 JavaScript 中所有其他值比较不同,当其中一个操作数为 NaN 时,这些运算符会评估为 false,即使另一个操作数也是 NaN。
由于 x !== x 是 JavaScript 中唯一一个仅对 NaN 为 true 的表达式,因此 Number.isNaN(x) 也可以被 x !== x 的测试所取代,尽管后者可读性较差。
与全局 isNaN() 函数相反,Number.isNaN() 方法不会强制将参数转换为数字。这使得传入那些通常会转换为 NaN 但实际上并不等于 NaN 的值是安全的。这也意味着只有值为 NaN 的 Number 类型才会返回 true。
示例
使用 isNaN()
js
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
Number.isNaN(37); // false
Number.isNaN() 和全局 isNaN() 的区别
Number.isNaN() 不会尝试将参数转换为数字,因此非数字值总是返回 false。以下都返回 false:
js
Number.isNaN("NaN");
Number.isNaN(undefined);
Number.isNaN({});
Number.isNaN("blabla");
Number.isNaN(true);
Number.isNaN(null);
Number.isNaN("37");
Number.isNaN("37.37");
Number.isNaN("");
Number.isNaN(" ");
全局 isNaN() 会将其参数强制转换为数字
js
isNaN("NaN"); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN("blabla"); // true
isNaN(true); // false, this is coerced to 1
isNaN(null); // false, this is coerced to 0
isNaN("37"); // false, this is coerced to 37
isNaN("37.37"); // false, this is coerced to 37.37
isNaN(""); // false, this is coerced to 0
isNaN(" "); // false, this is coerced to 0
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-number.isnan |
浏览器兼容性
加载中…