赋值运算

在JavaScript中,赋值运算符用于将值赋给变量。除了基本的赋值运算符=外,还有一系列复合赋值运算符,它们可以结合数学运算和赋值操作。以下是JavaScript中常用的赋值运算符的小结:

常用赋值运算

1. 基本赋值运算符 (=)

1let a;
2let b = 5;
3a = b; // 将变量b的值赋给变量a

2. 加法赋值运算符 (+=)

将左侧变量与右侧表达式相加的结果赋值给左侧变量。

1let a = 10;
2a += 5; // 等价于 a = a + 5; 结果为 a = 15

3. 减法赋值运算符 (-=)

从左侧变量中减去右侧表达式的结果,并将新值赋给左侧变量。

1let a = 10;
2a -= 5; // 等价于 a = a - 5; 结果为 a = 5

4. 乘法赋值运算符 (*=)

将左侧变量与右侧表达式相乘的结果赋值给左侧变量。

1let a = 10;
2a *= 3; // 等价于 a = a * 3; 结果为 a = 30

5. 除法赋值运算符 (/=)

将左侧变量除以右侧表达式的结果赋值给左侧变量。

1let a = 10;
2a /= 2; // 等价于 a = a / 2; 结果为 a = 5

6. 模运算符 (%=)

将左侧变量与右侧表达式求模(取余数)的结果赋值给左侧变量。

1let a = 10;
2a %= 3; // 等价于 a = a % 3; 结果为 a = 1

7. 指数赋值运算符 (**=)

将左侧变量与右侧表达式求指数(幂)的结果赋值给左侧变量。

1let a = 2;
2a **= 3; // 等价于 a = a ** 3; 结果为 a = 8

8. 左移赋值运算符 («=)

将左侧变量的二进制表示向左移动右侧表达式指定的位数,并将结果赋值给左侧变量。

1let a = 1;
2a <<= 2; // 等价于 a = a << 2; 结果为 a = 4 (二进制 1 左移两位变成 10)

9. 右移赋值运算符 (»=)

将左侧变量的二进制表示向右移动右侧表达式指定的位数,并将结果赋值给左侧变量。

1let a = 4;
2a >>= 1; // 等价于 a = a >> 1; 结果为 a = 2 (二进制 100 右移一位变成 10)

10. 无符号右移赋值运算符 (»>=)

将左侧变量的二进制表示向右移动右侧表达式指定的位数,并在左侧填充0,将结果赋值给左侧变量。

1let a = -4;
2a >>>= 1; // 等价于 a = a >>> 1; 结果为 a = 2147483647 (二进制 11111111111111111111111111111111111)

使用场景

赋值运算符通常用于简化代码,通过一条语句完成计算和赋值操作。它们在处理累加、累减、乘法累积等场景中非常有用。

注意事项

  • 操作数类型:赋值运算符会根据操作数的类型进行相应的计算。例如,+= 会将字符串连接而不是进行数值加法。
  • 链式赋值:赋值运算符可以链式使用,但可能会导致代码可读性降低,应谨慎使用。

示例代码

1let x = 10;
2x += 5; // x = 15
3x -= 3; // x = 12
4x *= 2; // x = 24
5x /= 4; // x = 6
6x %= 3; // x = 0
7x **= 2; // x = 0 (0的平方仍然是0)

练习题

  1. 加法运算:计算 5 + 3 的结果。

    1let sum = 5 + 3;
    2console.log(sum); // 输出:8
    
  2. 减法运算:计算 10 - 6 的结果。

    1let difference = 10 - 6;
    2console.log(difference); // 输出:4
    
  3. 乘法运算:计算 4 * 7 的结果。

    1let product = 4 * 7;
    2console.log(product); // 输出:28
    
  4. 除法运算:计算 20 / 5 的结果。

    1let quotient = 20 / 5;
    2console.log(quotient); // 输出:4
    
  5. 求余运算:计算 9 % 4 的结果。

    1let remainder = 9 % 4;
    2console.log(remainder); // 输出:1
    
  6. 幂运算:计算 2 ** 3 的结果。

    1let power = 2 ** 3;
    2console.log(power); // 输出:8
    
  7. 递增运算:给变量 x 赋值为 5,然后计算 x++ 的结果。

    1let x = 5;
    2let result = x++;
    3console.log(result); // 输出:5
    4console.log(x); // 输出:6
    
  8. 递减运算:给变量 y 赋值为 10,然后计算 y-- 的结果。

    1let y = 10;
    2let result = y--;
    3console.log(result); // 输出:10
    4console.log(y); // 输出:9
    
  9. 字符串连接:将字符串 "Hello, ""World!" 连接起来。

    1let greeting = "Hello, " + "World!";
    2console.log(greeting); // 输出:Hello, World!
    
  10. 交换变量:不使用临时变量,交换 a = 5b = 10 的值。

    1let a = 5;
    2let b = 10;
    3a = a + b;
    4b = a - b;
    5a = a - b;
    6console.log(a, b); // 输出:10 5
    
  11. 逻辑与运算:计算 true && false 的结果。

    1let result = true && false;
    2console.log(result); // 输出:false
    
  12. 逻辑或运算:计算 true || false 的结果。

    1let result = true || false;
    2console.log(result); // 输出:true
    
  13. 逻辑非运算:计算 !true!false 的结果。

    1let notTrue = !true;
    2let notFalse = !false;
    3console.log(notTrue, notFalse); // 输出:false true
    
  14. 比较运算:比较 5 > 35 < 3 的结果。

    1let greater = 5 > 3;
    2let less = 5 < 3;
    3console.log(greater, less); // 输出:true false
    
  15. 等于和不等于运算:计算 5 == '5'5 != '5' 的结果。

    1let equal = 5 == '5';
    2let notEqual = 5 != '5';
    3console.log(equal, notEqual); // 输出:true false
    
  16. 三元运算符:使用三元运算符判断 x = 10 是否大于 y = 5,如果是输出 “x is greater”,否则输出 “y is greater or equal”。

    1let x = 10;
    2let y = 5;
    3let result = x > y ? "x is greater" : "y is greater or equal";
    4console.log(result); // 输出:x is greater
    
  17. 自增和自减运算:给变量 count 赋值为 0,计算 count++++count 的结果。

    1let count = 0;
    2let result1 = count++;
    3let result2 = ++count;
    4console.log(result1, count, result2); // 输出:0 1 2
    
  18. 位运算符:计算 5 & 3(按位与)的结果。

    1let result = 5 & 3;
    2console.log(result); // 输出:1 (二进制 101 & 011)
    
  19. 类型转换:将字符串 "123" 与数字 456 相加的结果。

    1let result = "123" + 456;
    2console.log(result); // 输出:123456
    
  20. 短路运算:使用逻辑与和逻辑或运算符进行短路运算。例如,0 && 'foo'null || 'bar' 的结果。

    1let andResult = 0 && 'foo';
    2let orResult = null || 'bar';
    3console.log(andResult, orResult); // 输出:0 'bar'
    

这些练习题覆盖了JavaScript中的基本运算符和一些常见的运算场景,有助于加深对JavaScript运算符的理解和应用。