檢查 JavaScript 變量是否為數(shù)字的幾種方式
介紹
JavaScript 是一種動態(tài)類型的語言,這意味著解釋器是在運行時確定變量類型的。這允許我們可以用同一變量中存儲不同類型的數(shù)據(jù)。但是如果沒有文檔和保持一致性,在使用代碼時,我們很有可能并不知道變量究竟是哪種類型。
當我們打算對數(shù)字進行操作時,如果對字符串或數(shù)組進行操作會帶來奇怪的結果。在本文中,我們將研究可以幫我們確定所用的變量是否為數(shù)字的各種函數(shù)。
字符串形式的數(shù)字例如 "100" 不應該被處理,同時在 JavaScript中 NaN,Infinity 和 -Infinity 之類的特殊值也都是數(shù)字,不過我們將忽略這些值。
根據(jù)這些要求,最好使用 Number 對象內置 isFinite() 函數(shù)。但是有時候我們也會使用其他函數(shù),例如 Number.isNaN() 和 typeof() 等。
首先創(chuàng)建一些測試變量:
- let intVar = 2;
 - let floatVar = 10.5;
 - let stringVar = '4';
 - let nanVar = NaN;
 - let infinityVar = Infinity;
 - let nullnullVar = null;
 - let undefinedundefinedVar = undefined;
 
使用Number.isFinite()函數(shù)
Number.isFinite() 用來函數(shù)檢查變量是否為數(shù)字,但也用來檢查其是否為某些特殊值。它在遇到 NaN, Infinity 或者 -Infinity 時會返回 false。
接下來在上面定義的變量上進行測試:
- > Number.isFinite(intVar);
 - true
 - > Number.isFinite(floatVar);
 - true
 - > Number.isFinite(stringVar);
 - false
 - > Number.isFinite(nanVar);
 - false
 - > Number.isFinite(infinityVar);
 - false
 - > Number.isFinite(nullVar);
 - false
 - > Number.isFinite(undefined);
 - false
 
結果令人滿意。特殊的數(shù)字值以及所有非數(shù)字類型的變量都將會被忽略。如果想要檢查某個變量是否為數(shù)字, Number.isFinite() 函數(shù)是最好的選擇。
使用Number.isNaN()函數(shù)
標準的 Number 對象具有 isNaN() 方法。用來判斷傳入的參數(shù)值是否為 NaN。由于我們要檢查變量是否為數(shù)字,所以需要在檢查中要使用非運算符 !。
現(xiàn)在看看通過非運算符加 Number.isNaN() 函數(shù)能否只過濾數(shù)字:
- > !Number.isNaN(intVar);
 - true
 - > !Number.isNaN(floatVar);
 - true
 - > !Number.isNaN(stringVar);
 - true # 判斷錯誤
 - > !Number.isNaN(nanVar);
 - false
 - > !Number.isNaN(infinityVar);
 - true # 判斷錯誤
 - > !Number.isNaN(nullVar);
 - true # 判斷錯誤
 - > !Number.isNaN(undefinedVar);
 - true # 判斷錯誤
 
這種方法相當寬松,因為它接受的值根本不是數(shù)字。這種方法最適合在你知道自己的值是數(shù)字并且要檢查它是否為 NaN 值的情況下,并不適合常規(guī)數(shù)字的。
使用typeof()函數(shù)
typeof() 函數(shù)是一個全局函數(shù),它的參數(shù)可以接受變量或值,并返回其類型的字符串表示形式。JavaScript 共有 9 種類型:
- undefined
 - boolean
 - number
 - string
 - bigint
 - symbol
 - object
 - null (typeof() 顯示為對象)
 - function (對象的一種特殊類型)
 
為了驗證變量是否為數(shù)字,我們只需要檢查 typeof() 返回的值是否為 "number"。讓我們嘗試一下測試變量:
- > typeof(intVar) == 'number';
 - true
 - > typeof(floatVar) == 'number';
 - true
 - > typeof(stringVar) == 'number';
 - false
 - > typeof(nanVar) == 'number';
 - true # 判斷錯誤
 - > typeof(infinityVar) == 'number';
 - true # 判斷錯誤
 - > typeof(nullVar) == 'number';
 - false
 - > typeof(undefined) == 'number';
 - false
 
typeof() 函數(shù)比 Number.isNaN() 好得多。它可以正確的判斷 null 和 undefined 不是數(shù)字。但如果是 NaN 和 Infinity,它會返回 true。
盡管從技術角度上來說這是正確的,但 NaN 和 Infinity 是特殊的數(shù)字值,我們在大多數(shù)情況下都會忽略它們。
總結
本文研究了如何檢查 JavaScript 中的變量是否為數(shù)字。
- 只有在我們知道自己的變量是一個數(shù)字,并且需要驗證它是否為 NaN 時,Number.isNaN() 函數(shù)才適用。
 - 如果你的代碼需要處理 NaN,Infinity 或 -Infinity 及其他數(shù)字時,則 typeof() 函數(shù)是適用的。
 - Number.isFinite() 方法能夠處理特殊數(shù)字,并且最適合我們的要求。
 















 
 
 






 
 
 
 