array.from可将arguments伪数组转为真数组以安全使用数组方法;arguments有索引和length但无数组方法,直接调用map会报错;转换后支持map/filter/reduce等,且兼容es6+环境。

Array.from 可以直接将 arguments 这类伪数组转为真正的数组,从而安全使用 map、filter、reduce 等数组方法,避免因调用原型方法失败而报错。
为什么 arguments 是伪数组?
arguments 是函数内部自动创建的类数组对象:它有数字索引和 length 属性,但没有数组原型上的方法(如 push、slice)。直接调用 arguments.map(...) 会抛出 TypeError。
Array.from 转换 arguments 的基本写法
只需一行代码即可完成转换:
const args = Array.from(arguments);- 转换后
args是标准数组,支持所有数组方法 - 兼容性好,支持 ES6+ 环境(包括大多数现代浏览器和 Node.js)
更简洁的替代写法(ES6+)
虽然 Array.from 明确直观,但还有几种常用替代方式:
- 扩展运算符:
const args = [...arguments];(最简洁,但需确保arguments可迭代) -
Array.prototype.slice.call(arguments)(传统写法,兼容老环境) -
Array.from(arguments, x => x * 2)支持映射:第二个参数可直接对每个元素做处理,一步到位
实际应用示例
比如封装一个求所有参数平方和的函数:
function sumOfSquares() {
return Array.from(arguments).map(x => x * x).reduce((a, b) => a + b, 0);
}
sumOfSquares(1, 2, 3); // 返回 14
这里若不用 Array.from,arguments.map 就会失败;而用它之后,链式调用自然成立。
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











