isNaN()
isNaN() 函式用於判斷一個值是否為 NaN,如有必要,會首先將該值轉換為數字。由於 isNaN() 函式內部的型別強制轉換可能出乎意料,因此您可能更傾向於使用 Number.isNaN()。
試一試
function milliseconds(x) {
if (isNaN(x)) {
return "Not a Number!";
}
return x * 1000;
}
console.log(milliseconds("100F"));
// Expected output: "Not a Number!"
console.log(milliseconds("0.0314E+2"));
// Expected output: 3140
語法
isNaN(value)
引數
value-
要測試的值。
返回值
描述
isNaN() 是全域性物件的一個函式屬性。
對於數字值,isNaN() 測試該數字是否為 NaN。當 isNaN() 函式的引數不是 Number 型別時,該值會首先被強制轉換為數字,然後將結果值與 NaN 進行比較。
isNaN() 對於非數字引數的這種行為可能會讓人感到困惑!例如,空字串被強制轉換為 0,而布林值被強制轉換為 0 或 1;從直觀上來說,這兩個值都“不是數字”,但它們不會被評估為 NaN,因此 isNaN() 返回 false。因此,isNaN() 既不能回答“輸入是否為浮點數 NaN 值”的問題,也不能回答“輸入是否不是數字”的問題。
Number.isNaN() 是一種更可靠的方法來測試一個值是否為數字值 NaN。或者,可以使用表示式 x !== x,這兩種解決方案都不會受到全域性 isNaN() 不可靠的假陽性的影響。要測試一個值是否為數字,請使用 typeof x === "number"。
isNaN() 函式回答的問題是“在數字上下文中,輸入是否功能上等同於 NaN”。如果 isNaN(x) 返回 false,則您可以在算術表示式中使用 x,就像它是一個有效的非 NaN 數字一樣。如果 isNaN(x) 返回 true,則 x 將被強制轉換為 NaN 並使大多數算術表示式返回 NaN(因為 NaN 會傳播)。您可以利用這一點,例如,測試函式引數是否可進行算術處理(可“像”數字一樣使用),並透過丟擲錯誤、提供預設值等方式處理非數字值。透過這種方式,您可以編寫一個函式,充分利用 JavaScript 根據上下文隱式轉換值所提供的全部靈活性。
注意:+ 運算子既執行數字加法也執行字串連線。因此,即使 isNaN() 對兩個運算元都返回 false,+ 運算子仍可能返回一個字串,因為它不是用作算術運算子。例如,isNaN("1") 返回 false,但 "1" + 1 返回 "11"。為了確保您正在使用數字,請將該值強制轉換為數字,並使用 Number.isNaN() 來測試結果。
示例
請注意 isNaN() 如何對那些不是 NaN 值但也不是數字的值返回 true
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
// Strings
isNaN("37"); // false: "37" is converted to the number 37 which is not NaN
isNaN("37.37"); // false: "37.37" is converted to the number 37.37 which is not NaN
isNaN("37,5"); // true
isNaN("123ABC"); // true: Number("123ABC") is NaN
isNaN(""); // false: the empty string is converted to 0 which is not NaN
isNaN(" "); // false: a string with spaces is converted to 0 which is not NaN
// Dates
isNaN(new Date()); // false; Date objects can be converted to a number (timestamp)
isNaN(new Date().toString()); // true; the string representation of a Date object cannot be parsed as a number
// Arrays
isNaN([]); // false; the primitive representation is "", which coverts to the number 0
isNaN([1]); // false; the primitive representation is "1"
isNaN([1, 2]); // true; the primitive representation is "1,2", which cannot be parsed as number
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-isnan-number |
瀏覽器相容性
載入中…