对象嵌套解构可逐层提取属性,避免冗长点号访问;需结构对齐,支持别名、默认值(如{user: {profile: {name = '未知用户'} = {}} = {}})及数组混合解构。

直接用对象解构配合嵌套模式,就能一层层钻进对象取值,不用反复写点号或方括号。关键不是“能不能”,而是“怎么写清楚又不容易出错”。
嵌套解构的基本写法
要取 {user: {profile: {name: 'Alice', age: 30}}} 里的 name 和 age,不用写 data.user.profile.name,而是:
- 用花括号逐层展开:
const { user: { profile: { name, age } } } = data; - 左边结构必须和右边数据结构对齐;缺某一层,就会报错或得到
undefined - 变量名默认沿用属性名,比如
name就来自profile.name
给深层属性起别名,避免命名冲突
如果外层也有同名字段,或者想语义更明确,可以重命名:
const { user: { profile: { name: userName, age: userAge } } } = data;- 这样得到的是
userName和userAge,而不是直接叫name - 特别适合从 API 返回的扁平化字段(如
id、title)映射到业务变量
加默认值防崩,尤其面对不稳定的嵌套结构
后端字段可能缺失,比如 profile 为空或 name 是 undefined,这时默认值能兜底:
立即学习“Java免费学习笔记(深入)”;
const { user: { profile: { name = '未知用户', level = 'basic' } = {} } = {} } = data;- 注意两个
= {}:第一个给profile设空对象默认值,第二个给user设空对象默认值 - 没这层保护,一旦
user是null或undefined,解构会直接报错
混合数组与对象解构,处理列表型嵌套
遇到类似 {list: [{id: 1, info: {status: 'ok'}}, {id: 2, info: {status: 'error'}}]} 的结构,可以一起解:
-
const { list: [firstItem, secondItem] } = data;→ 拿前两项 - 再进一步:
const { list: [{ info: { status: firstStatus } }, { info: { status: secondStatus } }] } = data; - 也可以结合剩余运算符:
const { list: [first, ...rest] } = data;,然后对rest单独循环解构


















