解构赋值是对象/数组的「模式匹配式提取」,按名或按序提取值并重绑定变量,不创建新结构;对象解构依赖键名而非顺序,支持重命名与默认值;数组解构依赖索引位置,支持跳位、剩余元素和嵌套。

解构赋值不是语法糖,是对象/数组的「模式匹配式提取」
JavaScript 解构赋值本质是用一个结构模式(比如 { a, b } 或 [x, y])从源数据中按名或按序提取值并赋给同名/同位置的变量。它不创建新对象或数组,只是读取和重绑定——所以不能对未声明变量直接解构(会报 ReferenceError),也不能解构 null 或 undefined(会抛 TypeError)。
对象解构:属性名必须完全匹配,但可重命名和设默认值
对象解构靠键名匹配,不是顺序。常见误用是以为 { name, age } 能从 { age: 25, name: 'Alice' } 中按书写顺序取值——其实顺序无关,只看键是否存在。
- 重命名用
oldName: newName语法,例如const { userName: name } = user; - 默认值在属性不存在或为
undefined时生效,const { city = 'Beijing' } = user;;但null不触发默认值 - 嵌套解构要写全路径:
const { profile: { email } } = user;,若profile为undefined会报错,可加空对象默认值:const { profile = {} } = user; const { email } = profile;
数组解构:靠索引位置,支持跳位、剩余元素和嵌套
数组解构严格按索引顺序,空位代表跳过该索引,const [a, , c] = [1, 2, 3]; 中 a 是 1,c 是 3。
- 剩余元素用
...捕获,必须放在最后:const [first, ...rest] = [1, 2, 3, 4]; - 嵌套数组解构直接写内层数组模式:
const [a, [b, c]] = [1, [2, 3]]; - 解构函数返回值很常见:
const [err, data] = await Promise.allSettled([fetch('/api')]);,但注意 Promise.allSettled 返回的是对象数组,需先映射再解构
解构常被忽略的边界情况
解构看似简单,但几个细节极易引发静默错误或运行时异常:
立即学习“Java免费学习笔记(深入)”;
- 字符串可被解构(因为有迭代器),
const [a, b] = 'hi';得到a === 'h',b === 'i';但数字不行:const [n] = 42;报TypeError: 42 is not iterable - 解构参数用于函数定义时,形参默认值只在传入
undefined时生效,传null会直接解构失败 -
let和const声明时可解构,var也可以,但重复声明(如先const { x } = obj;再const x = 1;)会报SyntaxError
真正容易出问题的,往往不是语法写错,而是默认值逻辑没覆盖 null,或者嵌套层级里某个中间属性意外为 undefined。别依赖“看起来应该有”,解构前加一层存在性检查更稳妥。











