JavaScript中用对象解构获取剩余属性靠剩余属性语法(Rest Property),即...加变量名且必须置于解构末尾,可与默认值、嵌套解构共用,常用于剔除敏感字段。

JavaScript 中用对象解构获取剩余所有属性字段,靠的是 剩余属性语法(Rest Property),即三个点 ... 加一个变量名,写在解构表达式的最后。
基本写法:用 ... 捕获未被单独声明的属性
只要把 { a, b, ...rest } 这样的结构用于解构,JS 就会把没被显式列出的属性全部收集到 rest 这个新对象里:
const user = {
name: 'Alice',
age: 30,
city: 'Beijing',
job: 'Engineer'
};
const { name, age, ...others } = user;
console.log(name); // 'Alice'
console.log(age); // 30
console.log(others); // { city: 'Beijing', job: 'Engineer' }
注意:... 必须放在解构模式的末尾
否则会报错。下面这些写法都不合法:
-
{ ...rest, name } = obj❌(语法错误) -
{ name, ...rest, age } = obj❌(语法错误) -
{ ...rest, ...more } = obj❌(不能有多个 rest)
可以和默认值、嵌套解构一起用
剩余属性不干扰其他解构特性。例如:
立即学习“Java免费学习笔记(深入)”;
const data = {
id: 123,
title: 'Hello',
tags: ['js', 'es6'],
meta: { author: 'Bob', published: true }
};
const {
id,
title = 'Untitled',
tags,
meta: { author },
...rest
} = data;
// id=123, title='Hello', tags=['js','es6'], author='Bob'
// rest = { meta: { author: 'Bob', published: true } }
// 注意:meta 整体没被取走,所以进了 rest;但如果解构了 meta 的子属性,meta 本身就不会出现在 rest 里
实际小技巧:剔除某些字段后保留其余部分
比如你想传参给 API,但要排除敏感字段(如 token、password),就可以这样干净地剥离:
const formData = { username: 'Tom', password: '123', email: 't@x.com', token: 'abc' };
const { password, token, ...safeData } = formData;
// safeData = { username: 'Tom', email: 't@x.com' }
不复杂但容易忽略


















