JavaScript 赋值
JavaScript 赋值运算符
Section titled “JavaScript 赋值运算符”赋值运算符用于为 JavaScript 变量赋值。最基本的是简单赋值运算符(=),但 JavaScript 提供了几种复合赋值运算符以使代码更简洁。
常见赋值运算符
Section titled “常见赋值运算符”这些运算符执行一个操作,然后将结果赋值回变量。
| 运算符 | 示例 | 描述 (简写形式) |
|---|---|---|
| = | 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)逻辑赋值运算符 (ES2021)
Section titled “逻辑赋值运算符 (ES2021)”现代 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。这些逻辑赋值运算符提供了有条件地赋值的简洁方式,常用于设置默认值或根据变量当前状态更新其值。