类数组对象
所谓类数组对象,是指拥有 length 属性和若干索引属性的对象。从读写、获取长度、遍历这三个方面来看,与数组无异,但没有办法主动调用数组方法。
数组实例从 Array.prototype 继承了 push、pop、slice 等方法,而类数组对象的原型链里根本没有这一环,所以即使结构长得像数组,也调不动那些方法。
var array = ['name', 'age', 'sex'];
var arrayLike = {
0: 'name',
1: 'age',
2: 'sex',
length: 3
}类数组对象中没有继承Array的原型,但我们可以使用 Array.prototype 中的方法主动 call/apply/bind,来调用数组方法。
var arrayLike = {0: 'name', 1: 'age', 2: 'sex', length: 3 }
const arr = Array.prototype.slice.call(arrayLike);
console.log(arr);
const arrayLike2 = {...arrayLike}
const arr2 = Array.prototype.splice.call(arrayLike, 0, arrayLike.length) // splice 会返回被删除的数组,并且改变原数组,所以这里 arrayLike 已经被 "掏空"
console.log(arr2)
const arr3 = Array.from(arrayLike2);
console.log(arr3)
const arr4 = Array.prototype.concat.apply([], arrayLike2)
console.log(arr4)