Number.isNaN()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 2015 年 9 月以來,該特性已在各大瀏覽器中可用。

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)

引數

value

待測試 NaN 的值。

返回值

如果給定值為數值 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

瀏覽器相容性

另見