for 循环是遍历 arguments 最直接、最兼容的方式,因其具备数字索引和 length 属性;也可用 array.from(arguments) 或 [...arguments] 转为真数组再调用原生方法。

JavaScript 中 arguments 是一个典型的类数组对象(array-like object),它有数字索引和 length 属性,但没有数组的原生方法(如 forEach、map 等)。用 for 循环遍历它最直接、最兼容的方式就是使用传统 for (let i = 0; i 形式。
用标准 for 循环遍历 arguments
这是最常用也最稳妥的方式,不依赖任何额外转换或 ES6+ 特性,适用于所有环境(包括严格模式和非严格模式):
function example() {
for (let i = 0; i
说明:直接通过数字下标访问 arguments[i],循环上限取 arguments.length 即可。注意 arguments 不是真正的数组,所以不能调用 arguments.forEach(...)。
用 for...of 遍历(需先转成真数组)
for...of 本身只能遍历可迭代对象(如数组、Set、Map),而 arguments 在 ES5/ES6 中默认不可迭代。但可通过以下方式让它支持:
- 用扩展运算符:
for (const arg of [...arguments]) - 用
Array.from():for (const arg of Array.from(arguments)) - 用
Array.prototype.slice.call()(ES5 写法):for (const arg of Array.prototype.slice.call(arguments))
⚠️ 注意:这些写法都创建了新数组,有轻微内存开销;且在严格模式下 arguments 的行为更规范,但上述转换依然有效。
避免常见错误
- 不要写
for (let i in arguments)——for...in遍历的是属性名(包括可能的其他自有属性或继承属性),顺序也不保证,且会遍历到callee、length等非参数属性 - 不要直接对
arguments调用数组方法,如arguments.map(...),会报错TypeError: arguments.map is not a function - 箭头函数中没有
arguments绑定,若需使用应改用剩余参数...args,它是真数组
现代替代方案:优先使用剩余参数(...args)
ES6 引入的剩余参数语法更清晰、更强大,且天生是数组:
function example(...args) {
for (const arg of args) {
console.log(arg);
}
// 或
args.forEach(console.log);
}
建议:在支持 ES6 的环境中,尽量用 ...args 替代 arguments,语义明确、类型安全、方法丰富,还能避免 arguments 在严格模式下的某些限制(如禁止修改 callee)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











