JavaScript中的赋值运算符是编程中最基本的组成部分之一,它们能简化代码并提高效率。
一、基本赋值运算符 (=)
使用场景:给变量初始化或更新值
// 初始化变量
let count = 10; // 将10赋给count
// 更新变量值
let price = 50;
price = 75; // 更新价格为75
// 链式赋值(从右向左执行)
let a, b, c;
a = b = c = 100; // a, b, c都为100
console.log(a, b, c); // 输出: 100 100 100二、复合赋值运算符
1. 加法赋值 (+=)
使用场景:需要将一个值添加到现有变量上
let total = 20;
total += 15; // 等价于 total = total + 15
console.log(total); // 输出: 35
// 常见应用场景:计数器
let counter = 0;
counter += 1; // 计数器加1
console.log(counter); // 输出: 12. 减法赋值 (-=)
使用场景:需要从现有变量中减去一个值
let balance = 100;
balance -= 30; // 等价于 balance = balance - 30
console.log(balance); // 输出: 70
// 常见应用场景:购物车中减少商品数量
let cartQuantity = 5;
cartQuantity -= 1; // 减少一个商品
console.log(cartQuantity); // 输出: 43. 乘法赋值 (*=)
使用场景:需要将现有变量乘以一个值
let price = 10;
price *= 2; // 等价于 price = price * 2
console.log(price); // 输出: 20
// 常见应用场景:计算折扣价格
let originalPrice = 100;
let discountRate = 0.9; // 9折
let discountedPrice = originalPrice;
discountedPrice *= discountRate; // 应用折扣
console.log(discountedPrice); // 输出: 904. 除法赋值 (/=)
使用场景:需要将现有变量除以一个值
let totalAmount = 100;
totalAmount /= 4; // 等价于 totalAmount = totalAmount / 4
console.log(totalAmount); // 输出: 25
// 常见应用场景:平均分配
let total = 100;
let people = 4;
let perPerson = total;
perPerson /= people; // 每人分得
console.log(perPerson); // 输出: 255. 取余赋值 (%=)
使用场景:需要获取现有变量除以一个值的余数
let remainder = 19;
remainder %= 4; // 等价于 remainder = remainder % 4
console.log(remainder); // 输出: 3
// 常见应用场景:判断奇偶数
let number = 15;
if (number %= 2 === 0) {
console.log("偶数");
} else {
console.log("奇数"); // 输出: 奇数
}6. 幂赋值 (**=)
使用场景:需要将现有变量提升到指定幂次
let area = 5;
area **= 2; // 等价于 area = area ** 2
console.log(area); // 输出: 25
// 常见应用场景:计算面积、体积
let side = 3;
let squareArea = side;
squareArea **= 2; // 计算正方形面积
console.log(squareArea); // 输出: 9三、位运算复合赋值
1. 按位与赋值 (&=)
使用场景:对二进制位进行按位与操作
let flags = 5; // 二进制 0101
flags &= 3; // 二进制 0011
console.log(flags); // 输出: 1 (二进制 0001)2. 按位或赋值 (|=)
使用场景:对二进制位进行按位或操作
let options = 5; // 二进制 0101
options |= 3; // 二进制 0011
console.log(options); // 输出: 7 (二进制 0111)3. 按位异或赋值 (^=)
使用场景:对二进制位进行按位异或操作
let value = 5; // 二进制 0101
value ^= 6; // 二进制 0110
console.log(value); // 输出: 3 (二进制 0011)四、链式赋值
使用场景:同时为多个变量赋相同值
let a, b, c;
a = b = c = 10; // a, b, c都为10
console.log(a, b, c); // 输出: 10 10 10
// 也可以用于设置默认值
let user = { name: 'John' };
user.age = user.active = user.status = 1;
console.log(user); // { name: 'John', age: 1, active: 1, status: 1 }五、解构赋值 (ES6)
使用场景:从数组或对象中提取值
// 数组解构
const [name, age] = ['Alice', 30];
console.log(name, age); // 输出: Alice 30
// 对象解构
const person = { name: 'Bob', age: 25, city: 'New York' };
const { name, age } = person;
console.log(name, age); // 输出: Bob 25
// 与复合赋值结合
let { x, y } = { x: 10, y: 20 };
x += 5; // x=15
y *= 2; // y=40
console.log(x, y); // 输出: 15 40六、实际应用场景
1. 计数器实现
let counter = 0;
// 使用复合赋值简化计数
counter += 1; // 计数器加1
console.log(counter); // 输出: 1
counter += 1; // 再加1
console.log(counter); // 输出: 22. 累加器模式
let total = 0;
// 累加数组元素
const numbers = [1, 2, 3, 4, 5];
numbers.forEach(num => {
total += num;
});
console.log(total); // 输出: 153. 状态管理
// 使用复合赋值管理状态
let isClicked = false;
isClicked = !isClicked; // 用逻辑运算符切换状态
console.log(isClicked); // 输出: true
// 用复合赋值简化
isClicked = !isClicked; // 再次切换
console.log(isClicked); // 输出: false小贴士
- 赋值表达式返回值:赋值表达式返回被赋的值,这使得链式赋值成为可能。
let result = (a = 10); // a=10, result=10- 避免重复声明:使用
let或const时,禁止重复声明变量。
let x = 5;
let x = 10; // 会报错: SyntaxError- 常量赋值限制:
const声明的常量必须初始化且不可重新赋值。
const PI = 3.14;
PI = 3; // 会报错: TypeError