对象解构中可用剩余属性语法...rest提取未显式列出的自身可枚举属性,必须置于模式末尾且仅出现一次,支持与默认值、别名、嵌套解构组合使用。

用对象解构中的剩余属性语法 { ..., rest } 就能实现。
对象解构中使用剩余属性(...rest)
当从一个对象中解构时,如果只取部分已知属性,其余所有未列出的属性可以统一收集进一个新对象,只需在解构模式末尾加上 ...rest:
let { name, age, ...others } = { name: 'Alice', age: 28, city: 'Beijing', job: 'Engineer', salary: 15000 };执行后:
- name → 'Alice'
- age → 28
- others → { city: 'Beijing', job: 'Engineer', salary: 15000 }
注意点和常见情况
剩余属性必须是解构模式中的最后一个元素,且只能出现一次:
- ✅ 正确:
{ a, b, ...rest } - ❌ 错误:
{ ...rest, c }(语法报错) - ❌ 错误:
{ ...first, ...second }(不允许多个 rest)
剩余属性只收集「自身可枚举、未被显式解构」的属性,不包括原型链上的属性。
配合默认值或别名一起用
剩余属性可以和其他解构特性共存:
let { name: fullName = 'Anonymous', ...info } = { age: 30, country: 'China' };结果:
-
fullName → 'Anonymous'(因原对象无
name属性,取默认值) - info → { age: 30, country: 'China' }
嵌套对象里也能用剩余属性
比如从深层结构中提取部分字段,再把余下内容保留为子对象:
let { user: { id, ...userRest }, ...rest } = { version: 'v2', user: { id: 101, role: 'admin', status: 'active' } };得到:
- id → 101
- userRest → { role: 'admin', status: 'active' }
- rest → { version: 'v2' }











