js如何判斷變量是否為NaN NaN檢測的3種可靠方法

判斷變量是否為nan的方法有三種:1.使用isnan()函數需注意類型轉換問題;2.使用es6number.isnan()更精準;3.利用nan不等于自身的特性。isnan()會嘗試將值轉為數字,如isnan(“hello”)返回true,因此需結合typeof判斷類型;number.isnan()直接檢測是否為nan,不會進行類型轉換,推薦使用;通過val !== val可判斷nan,但可讀性差。處理可能返回nan的運算時,應提前驗證輸入或用number.isnan()處理結果。nan不等于自身是因ieee 754標準定義其表示無效數值,用于傳播錯誤信息。nan可用于表示缺失或未知值,但需確保代碼正確處理該值。

js如何判斷變量是否為NaN NaN檢測的3種可靠方法

JavaScript中判斷變量是否為NaN,核心在于利用isNaN()函數以及一些巧妙的類型轉換和比較。NaN是JavaScript中一個特殊的數值,表示“非數值”(Not-a-Number)。直接使用===運算符判斷變量是否等于NaN是行不通的,因為NaN !== NaN。

js如何判斷變量是否為NaN NaN檢測的3種可靠方法

isNaN()函數,Number.isNaN()函數,以及利用NaN的唯一性進行判斷。

js如何判斷變量是否為NaN NaN檢測的3種可靠方法

isNaN()函數的坑與正確使用姿勢

isNaN()函數是JavaScript早期版本就存在的函數,它的判斷邏輯并非直接判斷變量是否為NaN,而是嘗試將變量轉換為數值,如果轉換失敗,則返回true。這就會導致一些意想不到的結果。比如,isNaN(“hello”)會返回true,因為”hello”無法轉換為數值。而isNaN(“123”)會返回false,因為它能成功轉換為數值123。

js如何判斷變量是否為NaN NaN檢測的3種可靠方法

因此,在使用isNaN()函數時,需要注意傳入的變量類型。最好先使用typeof運算符判斷變量是否為number類型,再使用isNaN()函數進行判斷。

function isReallyNaN(val) {   return typeof val === 'number' && isNaN(val); }  console.log(isReallyNaN(NaN)); // true console.log(isReallyNaN("hello")); // false console.log(isReallyNaN("123")); // false console.log(isReallyNaN(123)); // false

Number.isNaN():更精確的NaN檢測

ES6引入了Number.isNaN()函數,它修復了isNaN()函數的缺陷。Number.isNaN()函數直接判斷變量是否為NaN,而不會進行類型轉換。只有當變量的值確實是NaN時,才會返回true。

console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN("hello")); // false console.log(Number.isNaN("123")); // false console.log(Number.isNaN(123)); // false

Number.isNaN()函數是判斷變量是否為NaN的最佳選擇。

利用NaN的唯一性:自比較法

由于NaN !== NaN,我們可以利用這個特性來判斷變量是否為NaN。如果一個變量不等于它自身,那么它就是NaN。

function isNaNBySelfComparison(val) {   return val !== val; }  console.log(isNaNBySelfComparison(NaN)); // true console.log(isNaNBySelfComparison("hello")); // false console.log(isNaNBySelfComparison("123")); // false console.log(isNaNBySelfComparison(123)); // false

這種方法簡潔明了,但可讀性稍差。在實際開發中,建議使用Number.isNaN()函數。

如何處理可能返回NaN的運算?

在進行數值運算時,需要注意某些運算可能會返回NaN。例如,0/0、math.sqrt(-1)等。在進行這些運算之前,應該先對輸入進行驗證,避免產生NaN。或者,在運算之后,使用Number.isNaN()函數檢查結果是否為NaN,并進行相應的處理。

function safeDivide(a, b) {   if (b === 0) {     return 0; // 或者拋出異常,或者返回一個默認值   }   const result = a / b;   return Number.isNaN(result) ? 0 : result; }  console.log(safeDivide(10, 0)); // 0 console.log(safeDivide(10, 2)); // 5

為什么NaN !== NaN?

這涉及到IEEE 754浮點數標準的定義。NaN表示的是一類特殊的數值,它代表的是無效的、未定義的或者不可表示的數值結果。由于NaN本身就代表著“非數值”,因此它不應該等于任何值,包括它自身。這種設計是為了確保NaN能夠正確地傳播錯誤信息。如果NaN === NaN,那么我們就無法區分一個有效的數值和一個無效的數值。

NaN在實際開發中的應用場景

雖然NaN通常表示錯誤,但在某些情況下,它可以用于表示缺失值或者未知值。例如,在處理用戶輸入時,如果用戶沒有輸入數值,我們可以將該字段的值設置為NaN。在數據分析中,NaN可以用于表示缺失的數據點。

需要注意的是,在使用NaN表示缺失值或者未知值時,需要確保代碼能夠正確地處理NaN。例如,在進行數值運算時,需要先使用Number.isNaN()函數檢查操作數是否為NaN,避免產生錯誤的結果。

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享