解构赋值是将数据结构与变量声明对齐的编程思维,对象解构按名取值、支持重命名和默认值,数组解构按序取值、支持跳过与剩余收集,函数参数和嵌套场景中可结合默认值提升健壮性。

解构赋值不是“省几个点号”的小技巧,而是把数据结构和变量声明对齐的编程思维。它用模式匹配代替重复访问,让取值逻辑更贴近数据本身的样子。
对象解构:按名取值,不靠位置
对象解构用花括号 {},根据属性名提取,顺序无关紧要:
-
同名提取:直接写变量名,如
{ name, age }→ 取obj.name和obj.age -
重命名:用冒号改名,如
{ title: bookName }→ 把obj.title赋给变量bookName -
默认值:用等号兜底,如
{ role = 'guest' }→ 若obj.role是undefined,就用'guest' -
嵌套解构:可多层展开,如
{ profile: { name, avatar } }→ 直接拿到obj.profile.name和obj.profile.avatar
数组解构:按序取值,支持跳过与收集
数组解构用方括号 [],依赖索引位置,但更灵活:
-
基础提取:
[a, b, c] = [1, 2, 3]→a=1、b=2、c=3 -
跳过元素:用逗号留空,如
[first, , third] = [1, 2, 3]→first=1、third=3 -
剩余收集:用
...捕获余下项,如[x, y, ...rest] = [1, 2, 3, 4, 5]→rest是[3, 4, 5] -
默认值生效条件:只在对应位置是
undefined时触发,null不算,如[a = 0] = [null]→a还是null
函数参数中直接解构,接口更清晰
把解构搬到函数形参里,调用时传对象即可,不用再手动拆包:
立即学习“Java免费学习笔记(深入)”;
- 基础用法:
function connect({ host, port = 3000 }) { ... },调用connect({ host: 'localhost' })即可 - 防错处理:
function render({ user = {} }) { const { name, avatar } = user; ... },避免user为null或undefined导致报错 - 结合 rest 收集多余字段:
function log({ id, ...rest }) { console.log(id); console.log(rest); }
嵌套与默认值组合使用,应对真实数据波动
后端返回的数据常有缺失或深层嵌套,解构可一层写完所有兜底逻辑:
- 示例:
const { profile: { name = '匿名', age = 0 }, address: { city = '未知' } = {}, contacts: { email } = {} } = userData || {}; - 关键点:每个嵌套层级后都可加默认空对象(如
= {}),防止profile.address不存在时报错 - 重命名 + 默认值可共存:
{ years: age = 18 }→ 取years属性,赋给age,若无则用18


















