arguments 是函数内自动存在的类数组对象,用于访问所有实参;它非真数组,需用 array.prototype.slice.call(arguments)、[...arguments] 或 array.from(arguments) 转换;现代开发优先使用 rest 参数(...args)。

arguments 是 JavaScript 中函数内部自动存在的类数组对象,它保存了调用该函数时传入的所有实参。它不是真正的数组,所以不能直接使用 map、filter、push 等数组方法,但可以通过一些方式转换为真数组来使用。
arguments 的基本用法
在非箭头函数中,arguments 可以用来获取任意数量的参数,尤其适用于“不定参数”场景(比如封装通用工具函数):
- 通过
arguments[i]访问第 i 个参数(索引从 0 开始) - 通过
arguments.length获取实参个数 - 注意:它没有
forEach、slice等数组方法,也不能解构(ES5 及更早环境)
将 arguments 转换为真数组的常用方法
以下几种方式都可把 arguments 变成真正的 Array 实例:
- Array.prototype.slice.call(arguments) —— 兼容性最好,适用于所有 ES5+ 环境
- [...arguments] —— ES6 展开语法,简洁直观,需支持 ES6+
-
Array.from(arguments) —— ES6 新增,语义清晰,也支持映射转换(如
Array.from(arguments, x => x * 2)) - Array.prototype.concat.apply([], arguments) —— 较少用,兼容性好但略绕
注意事项和替代方案
现代开发中,推荐优先使用更清晰、更安全的方式代替 arguments:
- 用 剩余参数(rest parameters) 替代:
function fn(...args) { console.log(args); }——args就是真数组,无需转换 - 箭头函数没有 arguments,只能靠 rest 参数或外层函数传递
- 严格模式下,arguments 不会自动与形参同步(即修改
arguments[0]不再影响对应形参变量)
不复杂但容易忽略:只要函数不需要动态访问参数列表,rest 参数比 arguments 更推荐;如果要兼容老环境或处理特殊逻辑,选 Array.from 或 slice.call 都很稳妥。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











