◆

JavaScript arguments 对象详解与转数组方法

2023-02-02 01:370

为什么需要 arguments 对象

由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是 arguments 对象的由来。

  • 通过 arguments[index] 获取函数运行时的参数
  • 通过 arguments 的参数可在函数内部修改,且非严格模式下,修改 arguments 对象会影响到实际的函数参数
  • arguments.length 可以判断函数调用时到底带几个参数
const fnn = function (num1, num2) {
  console.log(arguments.length); // 3
  console.log(arguments[0]); // 1
  console.log(arguments[1]); // 2
  console.log(arguments[2]); // 3

  console.log(num1 === arguments[0]); // true
  console.log(num2 === arguments[1]); // true

  arguments[1] = 'wfly';
  console.log(arguments[1]); // wfly
  console.log(num2); // wfly
  console.log(num2 === arguments[1]); // true
  console.log(arguments[1000]); // undefined
};

fnn(1, 2, 3);

arguments 是类数组

arguments 是类数组,除了 length 属性和索引元素之外没有任何 Array 属性

arguments 转数组方法

// slice 方法
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);

// Array.from
const args = Array.from(arguments);

// 扩展运算符
const args = [...arguments];

// 循环
const args = [];
for (let i = 0; i < arguments.length; i++) {
  args.push(arguments[i]);
}

callee 属性

callee:返回它所对应的原函数。

const fnn = function () {
  console.log(arguments.callee === fnn);
};

fnn(); // true

非严格模式下,可以通过 arguments.callee,达到调用函数自身的目的

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVEJavaScript arguments 对象详解与转数组方法加载中