对象解构核心在于匹配、赋值与容错:基础需属性名一致;可重命名(属性名:新变量名);支持嵌套与undefined时生效的默认值;已声明变量解构须加括号;可用...提取剩余属性;函数参数亦可直接解构。

对象解构不是“看”出来的,而是用出来的——核心在于理解它怎么匹配、怎么赋值、怎么容错。掌握几个关键维度,就能覆盖绝大多数实际场景。
基础匹配:变量名必须和属性名一致
解构时,花括号里的名字是“钥匙”,它严格按属性名去对象里找值:
-
const { name, age } = { name: '李四', age: 30 };→ 成功提取,name得到'李四' -
const { username } = { name: '李四' };→ 不报错,但username是undefined -
const { name } = null;或undefined→ 直接抛TypeError,无法解构空值
灵活重命名:用冒号改名,避免冲突或增强语义
当变量名已有定义,或想让名字更贴业务,就用 属性名: 新变量名:
const { id: userId, username: loginName } = { id: 1001, username: 'admin' };-
userId和loginName是新变量,原属性名只是“查找依据” - 冒号左边不能是表达式,必须是字面量属性名(如不能写
{ [key]: val },那是计算属性,需另处理)
嵌套与默认值:应对真实数据的不确定性
接口返回的数据常有层级或缺字段,解构能一层写到底,还能兜底:
- 嵌套:
const { profile: { city, job } } = { profile: { city: '杭州', job: '前端' } }; - 默认值:
const { level = 'user', points = 0 } = { level: 'vip' };→points自动取0 - 默认值只在属性为
undefined时生效;null、''、0都不会触发默认
进阶要点:声明与赋值分离、剩余属性、函数参数
这些不是炫技,而是工程中高频需求:
- 已声明变量再解构?必须加括号:
let name, age; ({ name, age } = user); - 提取部分后留其余?用剩余语法:
const { name, ...rest } = { name: '王五', email: 'w@x.com', role: 'dev' };→rest是{ email: 'w@x.com', role: 'dev' } - 函数参数直接解构:
function greet({ name = '访客', lang = 'zh' }) { return `你好,${name}`; }


















