javascript中将arguments转为真数组的推荐方法是array.from(arguments)或[...arguments],兼容老环境时用array.prototype.slice.call(arguments),避免使用array.apply或new array等错误方式。

JavaScript 中的 arguments 对象是一个类数组(array-like)对象,它有长度、可通过索引访问元素,但没有数组的原生方法(如 map、filter、slice 等)。要把它转成真正的数组,有几种常用且可靠的方式。
使用 Array.from()
这是最直观、语义最清晰的方法,适用于所有支持 ES6+ 的环境:
Array.from(arguments)
它会将任何可迭代对象或类数组对象(包括 arguments)转换为新数组。你还可以传入映射函数,一步完成转换和处理:
-
Array.from(arguments, x => x * 2)—— 转换同时对每个参数乘以 2 - 兼容性好,现代浏览器和 Node.js 6+ 均支持
使用扩展运算符(...)
在箭头函数或普通函数中,只要不是严格模式下的非箭头函数(注意:箭头函数没有 arguments),你可以直接用展开语法:
[...arguments]
但要注意:这个写法只能在函数体内使用,且该函数必须有 arguments 对象(即不能是箭头函数)。例如:
- ✅ 正常函数中可用:
function f() { return [...arguments]; } - ❌ 箭头函数中不可用:
const f = () => [...arguments];会报错(箭头函数无arguments)
使用 Array.prototype.slice.call()
这是 ES5 时代最经典的方法,兼容性极佳(包括老旧浏览器):
Array.prototype.slice.call(arguments)
也可以简写为:
[].slice.call(arguments)
- 原理是借用数组的
slice方法,让arguments“假装”是数组来调用 - 虽然写法略长,但在需要支持 IE8/9 的项目中仍很实用
不推荐:直接赋值 length 或使用 new Array()
以下方式容易出错,应避免:
-
Array.apply(null, arguments)—— 在参数过多时可能触发栈溢出(尤其 Chrome) -
new Array(arguments)—— 实际创建的是单元素数组[arguments],不是你想要的结果 - 手动遍历赋值 —— 冗余、易错,没必要
选哪种?日常开发优先用 Array.from(arguments) 或 [...arguments];需要兼容老环境时用 Array.prototype.slice.call(arguments)。核心原则是:确保得到的是真数组,能放心调用所有数组方法。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











