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.

Number.isNaN() 静态方法判断传入的值是否为 NaN,如果输入不是数字类型,则返回 false。它是全局 isNaN() 函数更健壮的版本。

尝试一下

语法

js
Number.isNaN(value)

参数

value

要测试是否为 NaN 的值。

返回值

如果给定值是一个值为 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 Language Specification
# sec-number.isnan

浏览器兼容性

BCD tables only load in the browser

参见