javascript中剩余参数(...)用于收集函数多余参数并生成真数组,必须位于参数末尾,支持map/filter/reduce等方法,与arguments类数组不同,且在箭头函数中可用。

JavaScript 中用三个点 ...(剩余参数)可以收集函数中多余的参数,形成一个真正的数组,方便处理不确定数量的输入。
剩余参数的基本写法
剩余参数必须放在参数列表的最后,前面可以有其他固定参数。它会把调用时传入的、未被前面参数匹配的值,全部收集进一个数组。
- 语法:在参数名前加 ...,例如 ...args
- 它不是类数组对象,而是标准 Array 实例,可直接用 map、filter、reduce 等方法
- 一个函数最多只能有一个剩余参数,且不能出现在普通参数之前
和 arguments 的区别
arguments 是函数内部的类数组对象,不是真正的数组;而剩余参数是真数组,更直观、更易用。
- arguments 在箭头函数中不可用;剩余参数在箭头函数中完全支持
- arguments 包含所有实参(包括已命名参数对应的值);剩余参数只收集“多出来的”那部分
- 不需要再用 Array.from(arguments) 或 [...arguments] 转换,剩余参数天生就是数组
常见使用场景
适合需要灵活处理多个输入的函数,比如求和、拼接、包装、日志记录等。
-
求和函数:
const sum = (...nums) => nums.reduce((a, b) => a + b, 0); -
带默认前缀的日志:
const log = (prefix, ...msgs) => console.log(`[${prefix}]`, ...msgs); -
函数柯里化或代理调用:
const wrapper = (fn, ...preset) => (...rest) => fn(...preset, ...rest);
注意点和易错情况
剩余参数看似简单,但几个细节容易出错:
- 不能和 arguments 混用(尤其在严格模式下会报错)
- 解构赋值中也有剩余语法(如
const [a, ...rest] = arr),语义类似但上下文不同,别混淆 - 调用时若没传多余参数,剩余参数数组为空(
[]),不是undefined,可放心遍历 - 不能用在对象方法简写中作为独立参数(如
obj = { method(...args) {} }是语法错误,需写成method: function(...args) {}或箭头函数)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











