剩余参数(...rest)用于接收不定长参数并生成真数组,必须位于参数末尾,可直接调用数组方法;区别于类数组的arguments,且不适用于解构类数组对象。

JavaScript 中用 剩余参数(Rest Parameters) 接收不定长参数,语法是三个点 ... 加一个形参名,它会把函数调用时多余的实参收集为一个真正的数组。
剩余参数的基本写法
剩余参数必须放在参数列表末尾,前面可以有其他固定参数。它不是类数组对象,而是 Array 实例,可直接使用 map、filter、reduce 等方法。
- 正确写法:
function sum(a, b, ...rest) { } - 错误写法:
function sum(...rest, a) { }(语法报错) - 错误写法:
function sum(a, ...rest, b) { }(语法报错)
与 arguments 的区别
arguments 是只读的类数组对象,没有数组方法;剩余参数是真数组,更直观易用。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 用
arguments:需转数组才能用forEach,如[...arguments].forEach(...) - 用剩余参数:直接
rest.forEach(...)即可 - 箭头函数中没有
arguments,但可以正常使用剩余参数
常见实用场景
适合处理可变数量输入的逻辑,比如求和、拼接、条件过滤等。
- 合并多个数组:
function concat(...arrays) { return arrays.flat(); } - 带默认前缀的日志函数:
function log(prefix, ...msgs) { console.log(`[${prefix}]`, ...msgs); } - 封装 Promise.all 的简化调用:
function all(...promises) { return Promise.all(promises); }
注意不能解构剩余参数本身
剩余参数已经是数组,不能再对它加 ... 当作展开运算符传入(除非你明确想再展开一次)。
- 错误理解:
function f(...args) { Math.max(...args); }—— 这其实是合法的,因为args是数组,...args是展开它 - 真正要避免的是混淆:
function f(...args) { args.map(...); }直接调用即可,不需要先展开再转回数组 - 如果传入的是类数组(如
NodeList),需先转数组再用剩余参数接收,否则不会自动转换
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










