一、一个赋值运算符(assignment operator)将它右边操作数的值赋给它左边的操作数
二、二元运算符可以和赋值运算符构成复合赋值运算符
三、复合赋值运算符

名字 简写的操作符 定义 示例
赋值(Assignment) x = y x = y
加法赋值(Addition assignment) x += y x = x + y
减法赋值(Subtraction assignment) x -= y x = x - y
乘法赋值(Multiplication assignment) x *= y x = x * y
除法赋值(Division assignment) x /= y x = x / y
求余赋值(Remainder assignment) x %= y x = x % y
求幂赋值(Exponentiation assignment) x **= y x = x ** y 2 3 = 8
3
2 = 9
左移位赋值(Left shift assignment) x <<= y x = x << y
右移位赋值(Right shift assignment) x >>= y x = x >> y
无符号右移位赋值(Unsigned right shift assignment) x >>>= y x = x >>>= y
按位与赋值(Bitwise AND assignment) x &= y x = x & y
按位异或赋值(Bitwise XOR assignment) x ^= y x = x ^ y
按位或赋值(Bitwise OR assignment) x |= y x = x | y

原地修改

一、我们经常需要对一个变量做运算,并将新的结果存储在同一个变量中。
例如:

  1. let n = 2;
  2. n = n + 5;
  3. n = n * 2;

二、可以使用运算符+=和*=来缩写这种表示。

  1. let n = 2;
  2. n += 5; // 现在 n = 7(等同于 n = n + 5)
  3. n *= 2; // 现在 n = 14(等同于 n = n * 2)
  4. alert( n ); // 14

三、所有算术和位运算符都有简短的“修改并赋值”运算符:/=和-=等。
四、这类运算符的优先级与普通赋值运算符的优先级相同,所以它们在大多数其他运算之后执行:

  1. let n = 2;
  2. n *= 3 + 5;
  3. alert( n ); // 16 (右边部分先被计算,等同于 n *= 8)

解构

【见】解构赋值:https://www.yuque.com/tqpuuk/yrrefz/wt97yv

赋值 = 返回一个值

一、=是一个运算符,而不是一个语言结构。
二、在 JavaScript 中,大多数运算符都会返回一个值。这对于+和-来说是显而易见的,但对于=来说也是如此。
1、语句x = value将值value写入x然后返回 x。
【示例1】在复杂语句中使用赋值:

  1. let a = 1;
  2. let b = 2;
  3. let c = 3 - (a = b + 1); // (a = b + 1)的结果是赋给a的值(也就是3)。然后该值被用于进一步的运算 // 请不要写这样的代码,可读性差
  4. alert( a ); // 3
  5. alert( c ); // 0

链式赋值(Chaining assignments)

一、链式赋值:链式赋值从右到左进行计算

  1. let a, b, c;
  2. a = b = c = 2 + 2;
  3. alert( a ); // 4
  4. alert( b ); // 4
  5. alert( c ); // 4

1、首先,对最右边的表达式2 + 2求值,
2、然后将其赋给左边的变量:c、b和a。
3、最后,所有的变量共享一个值。
二、同样,出于可读性,最好将这种代码分成几行:

  1. c = 2 + 2;
  2. b = c;
  3. a = c;

1、这样可读性更强,尤其是在快速浏览代码的时候。