JavaScript中赋值简写(如+=)是计算后赋值的语法糖,用于简化重复操作;解构赋值(如{a,b}=obj)是按结构提取数据的模式匹配,二者目的、机制与场景截然不同。

JavaScript 中的赋值运算符简写(如 +=、-=)和解构赋值(如 const {a, b} = obj)看似都是“赋值”,但目的、机制和使用场景完全不同:前者是操作+赋值的语法糖,后者是提取数据的结构化语法。
赋值运算符的简写形式:减少重复,提升可读性
这类写法本质是“先计算再赋值”,用于简化重复出现的变量名。比如 x += 5 等价于 x = x + 5,但更简洁,也避免手动重复书写变量名导致的拼写错误。
- 常见简写包括:
+=、-=、*=、/=、%=、**=、&=、|=、^=、<<=、>>=、>>>= - 对字符串也有效:
str += " world"相当于str = str + " world",但注意这是创建新字符串,不是修改原值 - 不支持链式简写:
a += b += c是合法语法,但等价于a += (b += c),容易引发逻辑误解,建议拆开写
解构赋值:按结构提取值,告别繁琐的点号访问
解构赋值不是运算,而是一种“模式匹配”——它根据等号右边的结构(对象或数组),从其中提取属性或元素,并绑定到左边的变量上。
- 对象解构:
const {name, age} = user;直接获取user.name和user.age;可重命名:const {name: fullName} = user; - 数组解构:
const [first, , third] = arr;跳过第二个元素;支持剩余语法:const [head, ...rest] = arr; - 默认值很实用:
const {role = "user"} = user;当user.role为undefined时生效(注意:null、false、0不触发默认值) - 可嵌套解构:
const {profile: {city}} = user;,但嵌套过深会降低可读性,需权衡
两者关键区别:别混淆“计算”和“提取”
简写赋值关注“怎么算完再存”,解构赋值关注“从哪取、取什么”。它们甚至可以共存,但角色分明:
立即学习“Java免费学习笔记(深入)”;
-
let count = 0; count += 1;→ 数值运算后更新自身 -
const {x, y} = point; x += 10;→ 先解构出x,再对局部变量做简写赋值 - 不能对解构出来的属性直接做“对象简写赋值”:
{x} += 5语法错误,因为{x}不是变量,而是解构模式
实际组合用法:让代码更紧凑又不失清晰
在函数参数、循环、API 响应处理中,二者常配合使用:
- 函数参数解构 + 默认值:
function log({msg = "hello", level = "info"} = {}) { console.log(`${level}: ${msg}`); } - for-of 循环中解构数组项:
for (const [id, name] of entries) { id += 100; console.log(name); } - 处理 API 返回对象:
const {data: {users}, status} = await fetchUsers(); users.forEach(u => u.score *= 1.1);










