JavaScript解构赋值中用...rest提取剩余参数,需置于末尾:函数参数、数组、对象解构均适用,分别收集未命名参数、剩余元素或未显式列出的可枚举属性,且不包含原型链属性。

JavaScript 中用解构赋值提取剩余参数变量,核心是结合 剩余元素语法(...) 和 数组或对象解构。它常用于函数参数、数组拆分、对象属性提取等场景,让代码更简洁清晰。
函数参数中提取剩余参数
在函数定义时,用 ...rest 作为解构的最后项,接收未被单独命名的参数,自动转为数组:
function greet(first, second, ...others) {
console.log('前两位:', first, second); // 'Alice', 'Bob'
console.log('其余:', others); // ['Charlie', 'Diana']
}
greet('Alice', 'Bob', 'Charlie', 'Diana');
-
...others必须放在参数列表末尾 - 即使只传两个参数,
others也是空数组[],不会报错 - 不能和
arguments混用;箭头函数不支持arguments,但支持这种解构
数组解构中提取剩余元素
从数组中提取前几个值后,用 ...rest 收集剩下所有项:
const colors = ['red', 'green', 'blue', 'yellow', 'purple']; const [first, second, ...remaining] = colors; console.log(first); // 'red' console.log(second); // 'green' console.log(remaining); // ['blue', 'yellow', 'purple']
-
...rest必须是解构模式中的最后一个元素 - 如果数组长度小于已命名变量个数(如只有 1 个元素却解构 3 个),前面变量取
undefined,rest仍为空数组 - 支持嵌套解构,例如
const [a, [...inner]] = [[1,2], [3,4,5]];
对象解构中提取剩余属性
对对象使用 ...rest 可收集未显式列出的所有可枚举属性:
立即学习“Java免费学习笔记(深入)”;
const user = { name: 'Tom', age: 30, city: 'NYC', job: 'dev' };
const { name, age, ...info } = user;
console.log(name); // 'Tom'
console.log(age); // 30
console.log(info); // { city: 'NYC', job: 'dev' }
-
...rest在对象解构中必须是最后一项 - 只拷贝自身可枚举属性,不包括原型链上的属性
- 若对象为空或没有未声明属性,
rest得到空对象{}
注意事项与常见误区
- 不能在对象解构中对
...rest使用重命名,如{ name, ...otherProps: extra }是语法错误 - 剩余参数不是“剩余运算符”的简单复用——它在解构中是 剩余元素/属性,语义上是“收集”,不是展开
- 解构时若右侧值为
null或undefined,会报错;可加默认值或提前校验:const [...arr] = myData || [];


















