数组解构按索引位置匹配,对象解构按属性名匹配;前者依赖顺序,后者无视顺序且支持重命名与默认值;嵌套结构中常混合使用,函数参数与api响应解析是典型场景。

对象解构和数组解构本质都是提取数据,但它们依据的结构规则完全不同:数组靠位置顺序,对象靠属性名称。理解这点,就抓住了核心区别。
关键区别:匹配逻辑不同
数组解构严格按索引位置一一对应:
-
const [a, b] = [10, 20]→a总是取第 0 个,b总是取第 1 个 - 跳过中间元素用空逗号:
const [x, , z] = [1, 2, 3]→x=1,z=3 - 变量多于元素时,多余变量得
undefined;可设默认值:const [a, b = 'ok'] = [1]→b = 'ok'
对象解构则完全无视顺序,只认属性名:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
-
const { b, a } = { a: 1, b: 2 }和const { a, b } = ...效果一样 - 变量名与属性名不同时需重命名:
const { name: fullName } = { name: 'Alice' } - 默认值只在属性值为
undefined时生效,null不触发:const { x = 0 } = { x: null }→x还是null
嵌套结构里自然结合使用
现实数据常是“对象里有数组,数组里有对象”,这时混合解构最直观:
- 从 API 响应中直接取用户头像列表第一项:
const { data: [first] } = response - 解构一个带标签数组的用户对象:
const { name, tags: [primaryTag] } = user - 深层嵌套 + 重命名 + 默认值:
const { profile: { avatar: img = '/default.png', level: lv = 1 } } = userData
函数参数中高频结合场景
接收配置对象时,内部字段可能是数组,直接一步到位:
function render({ title, items: [first, ...rest] }) { ... }-
fetchUser({ id, fields: ['name', 'email'] })→ 解构时可直接展开:const { id, fields: [nameField, emailField] } = config
注意一个常见坑:赋值语句开头要加分号
如果一行代码以 [ 或 { 开头,JS 可能误判为上一行的延续(比如把 console.log(x) 和下一行 [a, b] = arr 连起来解析)。安全写法是加前置分号:
;<code>[a, b] = arr-
;<code>{ x, y } = obj(对象解构无关键字时必须加括号或分号)










