簡述JavaScript對象、數組對象與類數組對象

問題引出


在上圖給出的文檔中,用JavaScript獲取那個a標籤,要用什麼辦法呢?相信第一反應一定是使用document.getElementsByTagName('a')[0]來獲取。同樣的,在使用getElementsByName等DOM遍歷方法中,我們也習慣性會去使用數組方法來進行操作,如數字索引、用length屬性訪問長度並遍歷等等。久而久之,很多人都一直認爲DOM遍歷方法返回的是一個數組。  實際上。。。。。。

返回了一個HTMLCollection對象

假如我們用一個數組來表示:

  返回的當然是一個數組對象了哈哈哈哈哈


上面兩個運行環境截圖給萌新們展示了,DOM遍歷方法返回的不是數組對象,而是一個HTMLCollection對象,下面來說說這種特別像數組卻又不是數組的對象:


JavaScript對象

JavaScript是一個基於對象的語言,正所謂萬物皆是對象。JavaScript對對象的定義是:屬性的無序集合,每個屬性存放一個原始值、對象或函數。這句話可以通俗理解爲,每個對象就是一個鍵值對的集合,鍵即是屬性名,而值就是屬性值,可以是原始值、對象或者函數。

這裏用字面量的方法定義了一個對象


而訪問對象的屬性有以下兩種辦法:

  1.         用‘.’來訪問,直接用 對象.屬性名 的方法來獲取
  2.         用[]來訪問:對象[屬性名]

數組對象

而數組對象,則是一個特殊的對象,可以看作是鍵名(屬性名)只能是數字(注意是絕對意義上的數字,而不是內容爲數字的字符串)、並且只能從0開始順次遞增1的整數的對象。數組對象繼承了對象的方法與特性,同時在自己這一層又定義了很多自己的方法,比如push()、shift()等等,這就構建了我們平時所使用的數組。


從上可以看到一個數組,除了所存儲的鍵值對屬性外,還具有length和__proto__兩個屬性,length不用多說,而__proto__指向該對象所繼承的元素,可以理解爲指向父類。  這裏可以看到一個普通的數組對象繼承自Array[0],在Array[0]中定義了數組的各種方法,而Array[0]則繼承自Object.

類數組對象及轉換

這裏再來說我們的類數組對象,相信就容易理解多了。 類數組對象是JavaScript中一類特殊的對象,他們也繼承自Object對象,具有length屬性,可以使用[]進行訪問(這樣也就可以使用for進行循環遍歷)、並且鍵是自然數序列。但是他們並不繼承自Array對象,也就不具有數組對象的種種方法了~

而JavaScript中的類數組對象並不只有HTMLCollection一個,另外常用的還有Arguments(函數的參數列表)、NodeList(節點列表)、StyleSheetList(樣式列表)等等,這裏就不詳細介紹了,大家可以自己試試他們各自的使用方法、屬性與方法。除了JavaScript內置的一些類數組對象之外,我們也可以自己來構建、甚至定義類數組對象來使用,比如甚至 。。。。。。


另外一個要提是類數組對象向數組對象的轉換。雖然我現在還沒有遇到過需要做如此轉換的情景,不過還是介紹下這個方法。除了“用for循環遍歷訪問類數組對象中的元素並裝入另外定義的一個數組”這樣的方法外,博客大神們還提供了另外一個方法,如下:

這裏使用了call方法,本菜鳥目前對JS繼承鏈上Function這個分支還沒怎麼深入研究,不太懂這個方法。留作以後解釋吧。。。。。。

發佈了29 篇原創文章 · 獲贊 30 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章