僞數組
擁有 length 屬性,其它屬性(索引)爲非負整數(對象中的索引會被當做字符串來處理,僞數組同樣有 length
屬性,也有 0、1、2、3
等屬性的對象,看起來就像數組一樣,但不是數組,
僞數組不具有數組所具有的方法
- 可以利用屬性名模擬數組的特性
- 可以動態的增長length屬性
- 如果強行讓類數組調用push方法,則會根據length屬性值得位置進行屬性的擴充。
比如:
var Array = {
"0": "first",
"1": "second",
"2": "third",
length: 3
};
for (var i = 0; i < Array.length; i++) {
console.log(Array[i]);
}
常見的僞數組有:
函數內部的 arguments
DOM 對象列表(比如通過 document.getElementsByTags 得到的列表)
jQuery 對象(比如 $("div") )
僞數組是一個 Object,而真實的數組是一個 Array。
僞數組存在的意義,是可以讓普通的對象也能正常使用數組的很多方法
類數組必須有幾個組成部分:
1.屬性要爲索引(數字)屬性
2.必須有length屬性
3.最好加上push方法
4. "splice" : Array.prototype.splice
var obj = {
0 : "a",
1 : "b",
2 : "c",
name : "abc",
age : 123,
length : 3,
push : Array.prototype.push,
splice : Array.prototype.splice
}
這樣一個類數組的基本形態已經算是構建完了,怎麼用呢??
Obj有push方法,只不過是拿的別人的,現在obj調用push,所以push裏面的this就是obj了。
他在”2”的後面加了一個”3”:’d’,並且lenngth也變成了四,這些都是一個對象不能具備的東西,憑什麼又加什麼,又改東西的。這樣的東西就叫類數組,
類數組的好處就是把數組和對象拼接在一起,但是他所有數組的方法並不是都能用。
兩者之間的區別
- 僞數組不具有數組所具有的方法
- 對象沒有數組 Array.prototype 的屬性值,類型是 Object ,而數組類型是 Array
- 數組是基於索引的實現, length 會自動更新,而對象是鍵值對
- 使用對象可以創建僞數組,僞數組可以正常使用數組的大部分方法