剩余参数是ES6引入的语法,用...args将函数末尾多余实参收集为真数组,必须位于参数列表末尾且仅一个,可直接调用数组方法,与arguments相比更简洁安全。

JavaScript 中用剩余参数(...)替代 arguments 对象,能更简洁、安全地处理不定长参数。
什么是剩余参数?
剩余参数是 ES6 引入的语法,用 ...args 形式把函数末尾的多余实参收集为一个真正的数组。它必须是函数参数列表的最后一个,且只能有一个。
与类数组对象 arguments 不同,剩余参数是标准数组,可直接调用 map、filter、reduce 等方法,无需转换。
基本写法和常见用法
定义函数时,在参数名前加三个点即可启用剩余参数:
-
求和函数:
function sum(...nums) { return nums.reduce((a, b) => a + b, 0); } -
合并日志前缀:
function log(prefix, ...msgs) { console.log(`[${prefix}]`, ...msgs); }(这里还用了扩展运算符输出) -
封装原生方法:比如包装
Math.max支持任意个参数:const max = (...arr) => Math.max(...arr);
和 arguments 的关键区别
剩余参数解决了 arguments 的几个痛点:
-
arguments不是数组,不能直接用数组方法;剩余参数是真数组,开箱即用 -
arguments包含所有实参(包括命名参数),而剩余参数只收集“未被命名参数匹配”的那部分 - 箭头函数没有
arguments,但可以正常使用剩余参数 - 剩余参数支持解构,例如:
function f(a, b, ...[first, ...rest]) { ... }
注意事项和典型错误
使用时需留意这些细节:
- 剩余参数必须放在参数列表末尾,
function f(...rest, last) {}会报语法错误 - 不能和
arguments混用(虽然不报错,但语义混乱,应避免) - 传入
undefined或空数组不会自动跳过,它们就是实际参数值 - 如果函数不需要命名参数,可直接写
function(...args) {...}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











