复合赋值运算符(如+=、-=、*=等)能简化代码、提升可读性并避免重复求值;但需注意类型转换、引用行为及不可替代方法调用。

赋值运算符本身不是用来“简化代码”的工具,而是基础操作手段;但合理使用复合赋值运算符(如 +=、-=、*= 等)确实能让代码更简洁、可读性更高,同时减少重复书写变量名和避免潜在错误。
用 += 替代重复变量名和加法表达式
当需要对一个变量做累加时,a = a + b 可直接写成 a += b。这不仅少打字,还确保左侧变量只被求值一次——对带副作用的表达式(比如函数调用或带 getter 的属性)尤其重要。
-
count = count + 1→count += 1 -
str = str + " world"→str += " world" -
arr.length = arr.length + 5→arr.length += 5(注意:修改 length 有特殊行为)
-=、*=、/=、%= 等同理,适用于对应运算
所有基本算术运算都有对应的复合形式,逻辑一致,语义清晰:
-
price = price * 0.9→price *= 0.9(打九折) -
offset = offset - step→offset -= step -
seconds = seconds % 60→seconds %= 60(取余归零)
注意隐式类型转换和边界情况
复合赋值仍遵循 JS 类型规则,不会自动“智能转换”。字符串拼接和数字运算容易混淆:
-
let x = "5"; x += 3;→ 结果是"53"(字符串拼接),不是8 -
let y = 5; y += "3";→ 同样是"53",因为+=对字符串会触发 toString - 若需数值运算,建议显式转换:
y = Number(y) + 3或y += 3前确保 y 是 number
慎用于对象/数组引用操作
复合赋值不改变引用本身,但若右侧操作修改了原对象,会影响所有持有该引用的地方:
-
let arr = [1]; arr.push(2);和arr = arr.concat([2]);行为不同,而arr += [2]实际是字符串拼接("1,2") - 没有
push+=这种语法,别试图用复合赋值替代方法调用 - 想批量更新对象属性?复合赋值帮不上忙,该用解构、扩展运算符或
Object.assign


















