JavaScript处理可变参数首选rest参数(...args),它是真数组、支持数组方法、可解构和设默认值;arguments是类数组对象,非数组实例且箭头函数中不可用,现代代码应避免使用。

JavaScript 中处理可变长度参数列表,主要靠 rest 参数(...args) 和 arguments 对象,但推荐使用 rest 参数——它更现代、类型友好、且真正是数组。
用 rest 参数接收任意数量的参数
rest 参数写在函数参数最后,用 ...name 语法,自动收集剩余实参为一个真数组,可直接调用 map、reduce、filter 等方法。
- 必须放在参数列表末尾,且只能有一个
- 即使没传参数,
args也是空数组,不会是undefined - 支持解构、默认值、与其他参数共存
示例:
function sum(...numbers) {
return numbers.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3); // 6
sum(); // 0
sum(5); // 5
避免用 arguments(仅兼容旧环境时考虑)
arguments 是类数组对象,存在于非箭头函数中,但不是 Array 实例,没有数组方法,且在严格模式下对它的某些操作受限(如重命名参数会影响 arguments[0])。
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 要转成数组得用
Array.from(arguments)或[...arguments] - 箭头函数没有
arguments,访问会报错 - 现代代码应优先用 rest 参数替代
结合解构和默认值增强灵活性
rest 参数可与普通参数、解构、默认值组合使用,让函数接口更清晰。
- 例如:前两个参数固定,其余为选项或数据项
- 可为 rest 数组设默认值(如
...items = []),但通常不必要,因为 rest 本身已为空数组 - 配合对象解构,轻松提取配置项
示例:
function createProfile(name, age, ...hobbies) {
return { name, age, hobbies: hobbies.filter(Boolean) };
}
createProfile('Alice', 28, 'reading', '', 'coding');
// { name: 'Alice', age: 28, hobbies: ['reading', 'coding'] }
需要透传参数时用展开运算符
调用其他函数时,把 rest 参数原样展开传递,比手动遍历更简洁安全。
- 比如封装 console 方法、代理函数调用
- 避免用
apply,改用fn(...args) - 展开后仍保持参数顺序和数量
示例:
function logWithPrefix(prefix, ...rest) {
console.log(`[${prefix}]`, ...rest);
}
logWithPrefix('INFO', 'User logged in', 123);
// [INFO] User logged in 123

















