arguments[Symbol.iterator]()

Baseline 已广泛支持

此功能已相当成熟,可在多种设备和浏览器版本上使用。自 ⁨2016 年 7 月⁩起,所有浏览器均已支持此功能。

arguments 对象的 [Symbol.iterator]() 方法实现了可迭代协议,并允许 arguments 对象被大多数期望可迭代对象的语法所消费,例如扩展语法for...of 循环。它返回一个数组迭代器对象,该对象按索引顺序生成 arguments 对象中的值。

此属性的初始值与 Array.prototype.values 属性的初始值是相同的函数对象(也与 Array.prototype[Symbol.iterator]() 相同)。

语法

js
arguments[Symbol.iterator]()

参数

无。

返回值

Array.prototype.values() 的返回值相同:一个新的可迭代迭代器对象,该对象按索引顺序生成 arguments 对象中的值。

示例

使用 for...of 循环进行迭代

请注意,你很少需要直接调用此方法。[Symbol.iterator]() 方法的存在使 arguments 对象可迭代,并且像 for...of 循环这样的迭代语法会自动调用此方法以获取迭代器进行循环。

js
function f() {
  for (const letter of arguments) {
    console.log(letter);
  }
}
f("w", "y", "k", "o", "p");

手动创建迭代器

你仍然可以手动调用返回的迭代器对象的 next() 方法,以实现对迭代过程的最大控制。

js
function f() {
  const argsIter = arguments[Symbol.iterator]();
  console.log(argsIter.next().value); // w
  console.log(argsIter.next().value); // y
  console.log(argsIter.next().value); // k
  console.log(argsIter.next().value); // o
  console.log(argsIter.next().value); // p
}
f("w", "y", "k", "o", "p");

规范

规范
ECMAScript® 2026 语言规范
# sec-createunmappedargumentsobject
ECMAScript® 2026 语言规范
# sec-createmappedargumentsobject

浏览器兼容性

另见