JavaScript中赋值运算符(=)和复合赋值运算符(+=、-=等)是语法糖,本质为“先计算再赋值”,提升可读性与安全性,避免重复求值副作用。

JavaScript 中的赋值运算符(=)和复合赋值运算符(如 +=、-=、*= 等)能显著减少重复代码,让逻辑更紧凑、可读性更高。关键不是“少打几个字”,而是让意图更明确——比如 count += 1 直观表达“在原有基础上加 1”,比 count = count + 1 更聚焦于变更本身。
基础赋值与常见复合赋值对照
复合赋值本质是“先计算再赋值”的语法糖,等价于展开写法,但更简洁安全(避免重复求值副作用):
-
a += b⇔a = a + b -
a -= 5⇔a = a - 5 -
total *= 1.08⇔total = total * 1.08(加税) -
str += " world"⇔str = str + " world"(字符串拼接) -
flags |= 0b0010⇔flags = flags | 0b0010(位或设标志位)
用复合赋值避免重复引用和潜在错误
当左侧表达式较复杂(含属性访问、函数调用或索引)时,手动展开容易出错或低效。复合赋值自动复用左侧值,更可靠:
- ✅ 推荐:
user.profile.score += 10—— 安全、清晰、只取一次profile - ❌ 风险:
user.profile.score = user.profile.score + 10—— 若profile是 getter 或有副作用,会被执行两次 - ✅ 数组元素更新:
items[i] *= 2比items[i] = items[i] * 2更简洁,且避免i被多次计算(尤其i是表达式时)
注意类型隐式转换与边界情况
复合赋值不改变 JavaScript 的类型转换规则,需留意实际行为:
立即学习“Java免费学习笔记(深入)”;
-
let n = "5"; n += 3;→"53"(字符串拼接,非数值相加) -
let n = "5"; n = n + 3;结果相同,说明+=并不“强制转数字” - 想确保数值运算?显式转换:
n = Number(n) + 3或n = +n + 3,再简化为n = +n + 3(此时不宜用+=) -
null += 1→"null1"(null转字符串),undefined += 1→"undefined1",这类边界需提前校验
链式赋值与解构中的赋值技巧
复合赋值可配合其他赋值形式进一步简化逻辑:
- 链式基础赋值:
let a = b = c = 0;(注意:这会让b、c成为全局变量,若未声明;推荐分开写或用const) - 解构 + 复合赋值:
const [x, y] = point; x += dx; y += dy;—— 常用于坐标更新 - 对象解构重赋值:
const { count } = data; data.count += 1;可合并为data.count += 1;,无需先解构(除非还需其他字段)


















