类数组?arguments?

281 阅读1分钟

一、类数组

类数组的定义

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);

三、类数组对象转化为数组

  1. 可以定义一个数组,因为arguments对象的length属性,遍历即可。
  2. 可以使用callapply改变this指向来调用Array的sliceconcatmapfilter方法,还可以调用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]
  1. 可以使用... 扩展运算符
[...arguments];//[1,2,3]