JavaScript赋值运算符=将右侧值存入左侧变量,复合赋值(如+=)是运算与赋值的简写;左侧须为左值,支持类型隐式转换、解构赋值等特性。

JavaScript 中的赋值运算符(=)用于把右侧的值存入左侧的变量,而复合赋值表达式(如 +=、-= 等)是赋值与算术/位运算的简写组合,既简洁又高效。
基础赋值运算符 =
它不表示“相等”,而是“把右边的值赋给左边的变量”。注意:左边必须是可赋值的表达式(如变量、对象属性、数组元素),不能是字面量或常量。
-
let x = 5;—— 将数字5赋给变量x -
const obj = { a: 1 };—— 将对象引用赋给obj(注意:不是深拷贝) -
arr[0] = 'first';—— 给数组第一个元素赋值,合法 -
5 = x;—— 错误!左侧不是左值(lvalue),会报ReferenceError
常用复合赋值运算符
它们等价于“先计算再赋值”,语法为 变量 运算符= 表达式,内部自动展开为 变量 = 变量 运算符 表达式(但左侧只求值一次,对有副作用的表达式更安全)。
-
a += b⇔a = a + b(支持字符串拼接:str += ' world') -
a -= b⇔a = a - b -
a *= b⇔a = a * b -
a /= b⇔a = a / b(除零结果为Infinity或-Infinity) -
a %= b⇔a = a % b(取余,注意负数行为:-7 % 3 === -1) -
a **= b⇔a = a ** b(ES2016 新增,幂运算) a 、<code>a >>= b、a >>>= b、a &= b、a ^= b、a |= b—— 对应位运算简写
复合赋值中的类型隐式转换
JavaScript 会按运算符规则自动转换类型,尤其要注意 + 的歧义性:
立即学习“Java免费学习笔记(深入)”;
-
let n = 5; n += '2';→n变成字符串'52'(因为+=遇到字符串时触发字符串拼接) -
let s = '10'; s += 5;→'105' - 若想确保数值运算,可提前转类型:
n = Number(n) + 2;或用n += +b;(+b强制转数字)
解构赋值:另一种“赋值”形式
虽然不属于传统复合赋值,但解构赋值(const [a, b] = arr;)极大提升了赋值表达力。它支持默认值、嵌套、对象属性重命名和剩余语法:
-
const [x = 0, y = 1] = [5];→x = 5,y = 1 -
const { name: n, age } = { name: 'Alice', age: 30 };→n = 'Alice',age = 30 -
[a, ...rest] = [1, 2, 3, 4];→a = 1,rest = [2, 3, 4]
掌握赋值与复合赋值,能写出更紧凑、意图更明确的代码;但也要留意类型转换陷阱和可读性平衡——过度链式或嵌套复合赋值反而降低维护性。


















