判斷javaScript變量是Ojbect類型還是Array類型


  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執行的結果

不知不覺又爬過了一個坑。編碼路上沒有捷徑,沒有代碼量的積累,就沒有值得飛躍。感謝各位看到這里,希望大家在不斷地努力下能早日實現自己的前端夢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM