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
- 数组取值是根据索引进行获取值, 而对象是根据键值对进行取值
- 对象没有数组的特性(索引),并且obj没有保存属性length,那么就是未定义,所以undefined
- 对于数组来讲,length是数组的内置属性,数组根据索引长度来更改length
什么是伪数组
- 具有length属性,其他属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解)
- 不具有数组的方法
伪数组类似于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)
})
差别
- 对象没有数组的Array.prototype 的属性值,类型是 Object ,而数组类型是 Array
- 数组是索引,对象是键值对
- 使用对象创建伪数组,伪数组可以使用部分方法
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号