首先我们看一下类数组的数据结构
- 使用数字作为属性名称
- 需要具备 length 属性
const obj = {
0: "a",
1: "b",
2: "c",
3: "d",
4: "e",
length: 5,
};
然后聊聊 JavaScript 为什么需要类数组
我们常见的类数组 arguments 对象
function sum(a, b) {
console.log(arguments);
arguments.push(3);
}
sum(1, 2);
- 如果 arguments 是一个数组,那么 arguments 就容易被开发者随意篡改。
- 如果 arguments 是一个普通的对象,那么操作起来又过于复杂,且对象需要键值对,没办法确定 key 值。
- 所以类数组能够轻易的转换成数组进行操作,而且直接修改的代价比数组大的多
最后,来看一下类数组如何转换成数组
- Array.from
function sum(a, b) {
const arr = Array.from(arguments);
console.log(arr);
}
sum(1, 2);
- 扩展运算符
function sum(a, b) {
for (let i in arguments) {
console.log(arguments[i]);
}
const arr = [...arguments];
console.log(arr);
}
sum(1, 2);
- 数组原型的方法运用在类数组上
function sum(a, b) {
const arr = Array.prototype.slice.call(arguments);
console.log(arr);
}
sum(1, 2);
- 循环操作
function sum(a, b) {
const arr = [];
for (let i in arguments) {
arr.push(arguments[i]);
}
console.log(arr);
}
sum(1, 2);
``;