NaN 的含義
在 JavaScript 中,NaN
是一種特殊的數值類型,表示 “Not-a-Number”。它通常用于標識數學運算或類型轉換的結果無法產生有效數值的情況。
特性
-
類型為數值:
console.log(typeof NaN); // "number"
盡管
NaN
表示 “不是一個數”,它仍然被視為 JavaScript 中的數值類型。 -
不等于任何值,包括自身:
console.log(NaN === NaN); // false console.log(NaN == NaN); // false
-
全局對象:
NaN
是全局對象的屬性,可以直接使用。 -
無法比較:通常需要使用
isNaN()
或Number.isNaN()
來檢測。
應用場景
1. 檢測無效的數學運算
某些數學操作無法返回有效的數值時,會生成 NaN
,例如:
console.log(0 / 0); // NaN
console.log(Math.sqrt(-1)); // NaN
console.log("abc" - 1); // NaN
2. 檢測無效的類型轉換
當非數值字符串嘗試轉換為數字時,會返回 NaN
:
console.log(Number("Hello")); // NaN
console.log(parseInt("abc")); // NaN
3. 使用 isNaN()
檢測非數值
isNaN()
可用于檢測值是否為 NaN
,但其對非數值的處理較寬松:
console.log(isNaN(NaN)); // true
console.log(isNaN("Hello")); // true (隱式轉換)
console.log(isNaN(undefined)); // true
console.log(isNaN("123")); // false
4. 使用 Number.isNaN()
檢測嚴格的 NaN
Number.isNaN()
更嚴格,僅在值為 NaN
時返回 true
:
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("Hello")); // false
console.log(Number.isNaN(undefined));// false
console.log(Number.isNaN("123")); // false
代碼示例
示例 1: 驗證用戶輸入是否為數值
function validateInput(input) {const num = Number(input);if (Number.isNaN(num)) {console.log("輸入不是有效的數字");} else {console.log("輸入是有效數字,值為:", num);}
}validateInput("42"); // 輸出: 輸入是有效數字,值為: 42
validateInput("abc"); // 輸出: 輸入不是有效的數字
validateInput(""); // 輸出: 輸入是有效數字,值為: 0
示例 2: 檢測無效的數學運算
function divide(a, b) {if (b === 0) {console.log("除數不能為零");return NaN;}return a / b;
}const result = divide(10, 0);
if (Number.isNaN(result)) {console.log("結果是 NaN,無法計算");
}
示例 3: 數據清洗
在數據處理中,可以用 NaN
來標識無效數據:
const data = ["42", "abc", "56", null, "100"];const cleanedData = data.map(item => {return isNaN(item ) ? null : item ;
});console.log(cleanedData);
// 輸出: [42, null, 56, null, 100]
總結
NaN
是 JavaScript 數值類型中的一個特殊值,用于表示無法計算或無效的數值。- 它在異常處理、輸入驗證、數據清洗等場景中非常有用。
- 要正確檢測
NaN
,建議使用Number.isNaN()
,而不是簡單地使用isNaN()
。