判斷javaScript變數是Ojbect類型還是Array類型
- 2021 年 9 月 26 日
- 筆記
- javascript, JS基礎, 前端
JavaScript是弱類型的語言,所以對變數的類型並沒有強制控制類型。所以聲明的變數可能會成為其他類型的變數, 所以在使用中經常會去判斷變數的實際類型。 對於一般的變數我們會使用typeof來判斷變數類型。
例如:在下面codesandbox中聲明一個變數a,並賦值一個字元串’love you forever’,然後使用typeof可以獲得指定變數的類型,可以在web-preview看到結果是String類型,再次向變數a賦值數字123,則判斷的類型為number,我再次向變數a賦值一個對象和一個數組,下面的web-preview結果顯示卻都是object,what。這是為什麼?
所以去MDN查閱相關資料,MDN對於typeof的參數描述內容為”一個表示對象或原始值的表達式“以及對typeof可能返回值如下表:
類型 | 結果 |
---|---|
Undefined | “undefined” |
Null | “object” |
Boolean | “boolean” |
Number | “number” |
String | “string” |
Symbol(es6) | “symbol” |
宿主對象(BOM和DOM) | 取決於具體實現 |
Function | “function” |
其他對象 | “object” |
從表中似乎沒有看到Array的字樣,說明可能包含在其他對象,所以typeof不適合做array的判斷。有沒有其他的方式呢?查閱資料發現四種方法.
- 構造方法判斷
let numbers = [1, 2, 3, 4, 5]
let isArray = numbers.construstor === Array ? 'yes' : 'no'
console.log(isArray)
- 原型判斷
let numbers = [1, 2, 3, 4, 5]
let isArray = Object.prototype.toString.call(numbers) === '[object Array]' ? 'yes' : 'no'
console.log(isArray)
- instanceof判斷
let numbers = [1, 2, 3, 4, 5]
let isArray = numbers instanceof Array ? 'yes' : 'no'
c
- Array內置的isArray方法判斷
let numbers = [1, 2, 3, 4, 5]
let isArray = Array.isArray(numbers) ? 'yes' : 'no'
console.log(isArray)
下面是用codesandbox執行的結果
不知不覺又爬過了一個坑。編碼路上沒有捷徑,沒有程式碼量的積累,就沒有值得飛躍。感謝各位看到這裡,希望大家在不斷地努力下能早日實現自己的前端夢。