javascript 中剩余参数通过展开语法(...)配合具名形参来收集多余变量,具体做法是在函数定义时将最后一个参数声明为 ...args 形式。调用时传入的超出其他形参数量的实参会被自动打包成一个数组赋值给该参数,从而避免使用 arguments 对象。

如何获取并处理所有传入的参数
直接回答:在函数签名中使用 ...rest 可以捕获所有未匹配的参数。例如定义一个求和函数,将前两个参数设为固定值,其余全部放入 rest 数组中。这样可以在函数体内直接对 rest 进行遍历或计算,无需关心调用者传了多少个额外参数。

function sumFixed(a, b, ...rest) {
const extraSum = rest.reduce((acc, val) => acc + val, 0);
return a + b + extraSum;
}
console.log(sumFixed(1, 2, 3, 4, 5)); // 输出: 15
// 1 + 2 + (3 + 4 + 5) = 15
剩余参数与 arguments 对象的差异
直接回答:剩余参数是真正的数组实例,而 arguments 是类数组对象。这意味着 ...rest 可以直接使用 map、filter 等数组方法,且不会受到函数是否严格模式的影响。此外,剩余参数只包含“多余”的参数,而 arguments 包含所有传入的参数,包括已匹配的那些。
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

function compareArgs(...rest) {
console.log('Rest is Array:', Array.isArray(rest)); // true
console.log('Arguments is Array:', Array.isArray(arguments)); // false
// 直接使用数组方法
const doubled = rest.map(x => x * 2);
console.log('Doubled rest:', doubled);
}
compareArgs(1, 2, 3);
// Rest is Array: true
// Arguments is Array: false
// Doubled rest: [2, 4, 6]
当没有多余参数时剩余参数的行为
直接回答:如果调用函数时传入的参数数量少于或等于除剩余参数外的其他形参数量,剩余参数将是一个空数组 []。这保证了代码在处理 rest 时始终安全,无需检查其是否存在或是否为空,因为空数组上的 reduce 或 map 操作都能按预期返回默认值或空结果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










