JavaScript數組和僞數組

僞數組和數組

記住一句話: 僞數組是一個Object,數組是Array。javascript

對象和數組之間的關係

JavaScript的內置函數繼承與 Object.prototypejava

能夠認爲new Array()[]建立出來的數組對象, 都擁有Object.prototype屬性值。數組

var obj = {}; //擁有Object.prototype的屬性值
var arr = []; //因爲Array.prototype的屬性繼承自Object.prototype, 那麼它就是擁有兩個屬性
// 即Array.prototype和Object.prototype

注意: 對象沒有數組的Array.prototype屬性值函數

什麼是數組

數組的基本特徵: 索引(下標)取值spa

var obj = {};
var array = [];

obj[0] = "L";
array[0] = "L";
console.log(obj); // {0: "L"}

console.log(obj[0]); // L
console.log(array[0]); // L
console.log(obj.length); // undefined
console.log(array.length); // 1
  1. 數組取值是根據索引進行獲取值, 而對象是根據鍵值對進行取值
  2. 對象沒有數組的特性(索引),而且obj沒有保存屬性length,那麼就是未定義,因此undefined
  3. 對於數組來說,length是數組的內置屬性,數組根據索引長度來更改length

什麼是僞數組

  1. 具備length屬性,其餘屬性(索引)爲非負整數(對象中的索引會被當作字符串來處理,這裏你能夠當作是個非負整數串來理解)
  2. 不具備數組的方法

僞數組相似於Python中的字典prototype

var fakeArray = {
    "0":"胡珺",
    "1":23,
    length:2
};
for (var i=0;i<fakeArray.length;i++){
    console.log(fakeArray[i])
}

常見的僞數組

  • 函數內部的arguments
  • DOM對象列表(document.getElementsByTags)
  • jQuery對象($("div"))

注意: 僞數組是一個對象code

簡單的一個應用對象

var obj = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
}
;[].push.call(obj, 'd');

console.log([].slice.call(obj))

;[].forEach.call(obj, function (num, index) {
  console.log(num)
})

差異

  1. 對象沒有數組的Array.prototype 的屬性值,類型是 Object ,而數組類型是 Array
  2. 數組是索引,對象是鍵值對
  3. 使用對象建立僞數組,僞數組能夠使用部分方法
相關文章
相關標籤/搜索