一.伪数组的定义和特性
伪数组又称类数组,是一个类似数组的对象。有以下几个特征:
1.按索引方式储存数据
0: xxx, 1: xxx, 2: xxx...
2.具有length属性
但是length属性是静态的,不会随着成员的变化而改变
不具有数组的push(), forEach()等方法
arrayLike.__proto__ === Object.prototype; //true
arrayLike instanceof Object; //true
arrayLike instanceof Array; //false
3.伪数组的原型链中并没有数组的原型
常见的典型伪数组,包括jQuery中通过 $()
获取的DOM元素集, 函数中的 arguments
对象, 以及字符串String
对象。
var arrLike = {
0: 'a',
1: 'b',
2: 'c',
length: 3,
}
arrLike[1]; //'b'
arrLike.length; //3
arrLike.push('d'); //Uncaught TypeError: arrLike.push is not a function
二.伪数组转化成真数组
Array.from()
方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
例子
var arrLike = {
0: 'a',
1: 'b',
2: 'c',
length: 3, //需要指定length
};
var arr = Array.from(arrLike); //['a', 'b', 'c']
注意这个返回的数组中,不会保留索引值以外的其他额外属性。
比如jQuery中$()获取的DOM伪数组,里面的context属性在被此方法转化之后就不会保留。