Skip to content

JavaScript 赋值

赋值运算符用于为 JavaScript 变量赋值。最基本的是简单赋值运算符(=),但 JavaScript 提供了几种复合赋值运算符以使代码更简洁。

这些运算符执行一个操作,然后将结果赋值回变量。

运算符示例描述 (简写形式)
=x = y将 y 的值赋给 x。
+=x += y等同于 x = x + y。将 y 加到 x 上,然后将结果赋给 x。
-=x -= y等同于 x = x - y。将 y 从 x 中减去,然后将结果赋给 x。
*=x *= y等同于 x = x * y。将 x 乘以 y,然后将结果赋给 x。
/=x /= y等同于 x = x / y。将 x 除以 y,然后将结果赋给 x。
%=x %= y等同于 x = x % y。将 x 除以 y 的余数赋给 x。
**=x **= y等同于 x = x ** y。将 x 提升到 y 的幂,然后将结果赋给 x (ES2016)。
let x = 10;
let y = 5;
// 简单赋值
let z = 20;
// 加法赋值
let sum = 10;
sum += 5; // sum 变为 15 (10 + 5)
// 减法赋值
let difference = 10;
difference -= 3; // difference 变为 7 (10 - 3)
// 乘法赋值
let product = 10;
product *= 2; // product 变为 20 (10 * 2)
// 除法赋值
let quotient = 10;
quotient /= 2; // quotient 变为 5 (10 / 2)
// 取余赋值
let remainder = 10;
remainder %= 3; // remainder 变为 1 (10 % 3)
// 幂运算赋值 (ES2016)
let power = 2;
power **= 3; // power 变为 8 (2 * 2 * 2)

现代 JavaScript (ES2021+) 引入了逻辑赋值运算符,它们将逻辑操作与赋值相结合。只有当满足特定逻辑条件时,它们才会将值赋给变量。

运算符示例描述
&&=x &&= y逻辑与赋值。仅当 x 为真值 (truthy) 时才将 y 赋给 x。(短路行为:如果 x 是假值 (falsy),则不评估 y)。等同于 x = x && y 或 if (x) { x = y; }。
||=x ||= y逻辑或赋值。仅当 x 为假值 (falsy) 时才将 y 赋给 x。(短路行为:如果 x 是真值 (truthy),则不评估 y)。等同于 x = x || y 或 if (!x) { x = y; }。
??=x ??= y空值合并赋值。仅当 x 是空值 (nullish,即 null 或 undefined) 时才将 y 赋给 x。(短路行为:如果 x 不是空值,则不评估 y)。等同于 x = x ?? y 或 if (x === null || x === undefined) { x = y; }。
// 逻辑与赋值 (&&=)
let user = { name: "Alice" };
user.name &&= "Bob"; // user.name 为真值 ("Alice"),因此被赋为 "Bob"。user 变为 { name: "Bob" }
let settings = null;
settings &&= { theme: "dark" }; // settings 为假值 (null),因此不进行赋值。settings 仍然是 null。
// 逻辑或赋值 (||=)
let options = null;
options ||= { default: true }; // options 为假值 (null),因此被赋为 { default: true }。
let config = { mode: "prod" };
config ||= { default: true }; // config 为真值,因此不进行赋值。config 仍然是 { mode: "prod" }。
// 空值合并赋值 (??=)
let gameSettings = { difficulty: null };
gameSettings.difficulty ??= "medium"; // gameSettings.difficulty 是 null (空值),被赋为 "medium"。
// gameSettings 变为 { difficulty: "medium" }
let score = 0; // 0 不是空值
score ??= 100; // score 不是空值 (0),因此不进行赋值。score 仍然是 0。

这些逻辑赋值运算符提供了有条件地赋值的简洁方式,常用于设置默认值或根据变量当前状态更新其值。