JavaScript數組和偽數組


偽數組和數組

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

對象和數組之間的關系

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

可以認為new Array()[]創建出來的數組對象, 都擁有Object.prototype屬性值。

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

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

什么是數組

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

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中的字典

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"))

注意: 偽數組是一個對象

簡單的一個應用

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. 使用對象創建偽數組,偽數組可以使用部分方法


免責聲明!

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



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