一、类数组
类数组的定义
JavaScript 中的类数组指的是具有length属性且元素以数字作为键名的对象
JavaScript常见的类数组
- arguments对象
- 获取Dom元素方法返回的结果(比如getElementsByTagName获取到的
Nodelist对象)
arguments 是一个对应于传递给函数的参数的类数组对象。
arguments对象是所有非箭头函数中都可用的局部变量。
我们可以对比一下:
// 普通函数
function myFunc(a, b) {
console.log(arguments); // 打印类数组对象 { "0": 1, "1": 2 }
console.log(arguments[0]); // 打印第一个参数 1
console.log(arguments[1]); // 打印第二个参数 2
}
function main() {
// 箭头函数会继承父级作用域的 arguments 对象
const myArrowFunc = () => {
console.log(arguments); // 打印 [3, 4]
};
myArrowFunc(1, 2);
}
main(3, 4);
// 可以这样处理
function main() {
const myArrowFunc = (...args) => {
console.log(args); // 打印 [1, 2]
};
myArrowFunc(1, 2);
}
main(3, 4);
三、类数组对象转化为数组
- 可以定义一个数组,因为arguments对象的length属性,遍历即可。
- 可以使用
call、apply改变this指向来调用Array的slice、concat、map和filter方法,还可以调用from方法。
Array.apply(null,arguments);//[1,2,3]
Array.prototype.slice.call(arguments);//[1,2,3]
Array.prototype.concat.apply([], arguments);//[1,2,3]
Array.prototype.map.call(arguments, x => x);//[1,2,3]
Array.prototype.filter.call(arguments,x => x)//[1,2,3]
Array.from(arguments);//[1,2,3]
- 可以使用
...扩展运算符
[...arguments];//[1,2,3]