NaN 在 JavaScript 中代表 Not a Number(不是數(shù)字),是一個(gè)特殊的值,表示一個(gè)不能用數(shù)字來表示的值。
NaN 主要出現(xiàn)在數(shù)字運(yùn)算中,例如:
console.log(10 * "a"); // NaN console.log(Math.sqrt(-1)); // NaN
上面兩個(gè)例子都會(huì)返回 NaN,因?yàn)樗鼈兌忌婕暗搅艘粋€(gè)無法計(jì)算為數(shù)字的值。
NaN 的類型是 Number,可以使用 isNaN() 函數(shù)來判斷一個(gè)變量是否為 NaN:
console.log(isNaN(10)); // false console.log(isNaN("a")); // true console.log(isNaN(NaN)); // true console.log(isNaN(undefined)); // true
需要注意的是,isNaN() 函數(shù)實(shí)際上會(huì)嘗試將參數(shù)轉(zhuǎn)換為數(shù)字,所以帶有非數(shù)字的字符串和 undefined 等值也會(huì)返回 true。
如果想正確判斷一個(gè)變量是否為 NaN,可以使用 Number.isNaN() 函數(shù):
console.log(Number.isNaN(10)); // false console.log(Number.isNaN("a")); // false console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN(undefined)); // false
Number.isNaN() 函數(shù)只會(huì)判斷參數(shù)是否為 NaN。
需要注意的是,NaN 與任何值都不相等,包括 NaN 本身。這一點(diǎn)可以使用 isNaN() 函數(shù)來證明:
console.log(NaN === NaN); // false console.log(isNaN(NaN)); // true console.log(isNaN("abc")); // true
另外,NaN 是一個(gè)全局變量,可以使用 window.NaN 或者 NaN 來訪問。但是不要嘗試將變量賦值為 NaN,JavaScript 中的 NaN 是不可變的。
最后,需要注意的是,在處理數(shù)據(jù)時(shí),要避免出現(xiàn) NaN。如果運(yùn)算中可能出現(xiàn) NaN,可以使用 isNaN() 函數(shù)來判斷是否是 NaN,如果是,可以使用默認(rèn)值或者其他值來替代。例如:
let num1 = 10; let num2 = "a"; let result = num1 * num2; if (isNaN(result)) { result = 0; } console.log(result); // 0
上面的例子中,如果 num2 不是數(shù)字,那么 result 就會(huì)變成 NaN,通過使用 isNaN() 函數(shù)來判斷,最后將 result 替換為了 0。
總之,NaN 是 JavaScript 中的一個(gè)特殊值,表示一個(gè)不能用數(shù)字來表示的值,避免出現(xiàn) NaN 可以提高程序的穩(wěn)定性和可讀性。