Number.isNaN()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
尝试一下
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
。
由于在所有可能的 JavaScript 值中,x !== x
只有对于 NaN
才为真,因此 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,强制转换为 1
isNaN(null); // false,强制转换为 0
isNaN("37"); // false,强制转换为 37
isNaN("37.37"); // false,强制转换为 37.37
isNaN(""); // false,强制转换为 0
isNaN(" "); // false,强制转换为 0
规范
Specification |
---|
ECMAScript® 2025 Language Specification # sec-number.isnan |
浏览器兼容性
BCD tables only load in the browser