1.什么是类数组对象?
JS中的定义:它们看起来很像数组,只是具有部分和数组相同特性:
- 拥有length属性
- 元素保存在对象中,可以通过索引访问但是不能调用数组的其他方法
2.为什么要将类数组转为数组?
由于类数组不具有数组所具有的操作数组的方法,类数组转换为数组之后就能调用如shift(),unshift(),splice(),slice(),reverse(),sort()等这些强大的方法,方便快捷。
3.类数组对象转为数组的方法:
- Array.prototype.slice.call(类数组对象)
数组的slice()方法可以从已有数组中返回一个新数组,它可以接受两个参数arr.slice(start,end),第一个参数star规定从何处开始选取,第二个参数end表示从何处选取结束,如果不传参将返回原数组的一个复制数组,但该方法不会修改原数组,而是返回截取的新数组,根据这个就可以将类数组转化成数组对象
举例:
var ArrayLike={
'0':'hello',
'1':'world',
'2':'ok',
'3':12,
length:4,
}
var result=Array.prototype.slice.call(ArrayLike);
console.log(result)
结果:
2.Array.from(类数组对象)
举例:
var ArrayLike={
'0':'hello',
'1':'world',
'2':'ok',
'3':12,
length:4,
}
var result=Array.from(ArrayLike);
console.log(result)
结果:
3.扩展运算符
(…类数组对象)
举例:
var ArrayLike={
'0':'hello',
'1':'world',
'2':'ok',
'3':12,
length:4,
}
var result=[...ArrayLike]
console.log(result)
此时会报错:
为类数组部署 Iterator 接口:
var ArrayLike={
'0':'hello',
'1':'world',
'2':'ok',
'3':12,
length:4,
[Symbol.iterator]: Array.prototype[Symbol.iterator]
}
var result=[...ArrayLike]
console.log(result)
结果: