做者:Marcus Sanatan翻譯:瘋狂的技術宅javascript
原文:https://stackabuse.com/javasc...前端
未經容許嚴禁轉載java
JavaScript 是一種動態類型的語言,這意味着解釋器是在運行時肯定變量類型的。這容許咱們能夠用同一變量中存儲不一樣類型的數據。可是若是沒有文檔和保持一致性,在使用代碼時,咱們頗有可能並不知道變量到底是哪一種類型。程序員
當咱們打算對數字進行操做時,若是對字符串或數組進行操做會帶來奇怪的結果。在本文中,咱們將研究能夠幫咱們肯定所用的變量是否爲數字的各類函數。面試
字符串形式的數字例如 "100"
不該該被處理,同時在 JavaScript中 NaN
,Infinity
和 -Infinity
之類的特殊值也都是數字,不過咱們將忽略這些值。segmentfault
根據這些要求,最好使用 Number
對象內置 isFinite()
函數。可是有時候咱們也會使用其餘函數,例如 Number.isNaN()
和 typeof()
等。數組
首先建立一些測試變量:服務器
let intVar = 2; let floatVar = 10.5; let stringVar = '4'; let nanVar = NaN; let infinityVar = Infinity; let nullVar = null; let undefinedVar = undefined;
Number.isFinite()
用來函數檢查變量是否爲數字,但也用來檢查其是否爲某些特殊值。它在遇到 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
結果使人滿意。特殊的數字值以及全部非數字類型的變量都將會被忽略。若是想要檢查某個變量是否爲數字, Number.isFinite()
函數是最好的選擇。
標準的 Number
對象具備 isNaN()
方法。用來判斷傳入的參數值是否爲 NaN
。因爲咱們要檢查變量是否爲數字,因此須要在檢查中要使用非運算符 !
。
如今看看經過非運算符加 Number.isNaN()
函數可否只過濾數字:
> !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 # 判斷錯誤
這種方法至關寬鬆,由於它接受的值根本不是數字。這種方法最適合在你知道本身的值是數字而且要檢查它是否爲 NaN
值的狀況下,並不適合常規數字的。
typeof()
函數是一個全局函數,它的參數能夠接受變量或值,並返回其類型的字符串表示形式。 JavaScript 共有 9 種類型:
undefined
boolean
number
string
bigint
symbol
object
null
(typeof()
顯示爲對象)function
(對象的一種特殊類型)爲了驗證變量是否爲數字,咱們只須要檢查 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()
函數比 Number.isNaN()
好得多。它能夠正確的判斷 null
和 undefined
不是數字。但若是是 NaN
和 Infinity
,它會返回 true。
儘管從技術角度上來講這是正確的,但 NaN
和 Infinity
是特殊的數字值,咱們在大多數狀況下都會忽略它們。
本文研究瞭如何檢查 JavaScript 中的變量是否爲數字。
NaN
時,Number.isNaN()
函數才適用。NaN
,Infinity
或 -Infinity
及其餘數字時,則 typeof()
函數是適用的。Number.isFinite()
方法可以處理特殊數字,而且最適合咱們的要求。