一、一个赋值运算符(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 |
原地修改
一、我们经常需要对一个变量做运算,并将新的结果存储在同一个变量中。
例如:
let n = 2;n = n + 5;n = n * 2;
二、可以使用运算符+=和*=来缩写这种表示。
let n = 2;n += 5; // 现在 n = 7(等同于 n = n + 5)n *= 2; // 现在 n = 14(等同于 n = n * 2)alert( n ); // 14
三、所有算术和位运算符都有简短的“修改并赋值”运算符:/=和-=等。
四、这类运算符的优先级与普通赋值运算符的优先级相同,所以它们在大多数其他运算之后执行:
let n = 2;n *= 3 + 5;alert( n ); // 16 (右边部分先被计算,等同于 n *= 8)
解构
【见】解构赋值:https://www.yuque.com/tqpuuk/yrrefz/wt97yv
赋值 = 返回一个值
一、=是一个运算符,而不是一个语言结构。
二、在 JavaScript 中,大多数运算符都会返回一个值。这对于+和-来说是显而易见的,但对于=来说也是如此。
1、语句x = value将值value写入x然后返回 x。
【示例1】在复杂语句中使用赋值:
let a = 1;let b = 2;let c = 3 - (a = b + 1); // (a = b + 1)的结果是赋给a的值(也就是3)。然后该值被用于进一步的运算 // 请不要写这样的代码,可读性差alert( a ); // 3alert( c ); // 0
链式赋值(Chaining assignments)
一、链式赋值:链式赋值从右到左进行计算
let a, b, c;a = b = c = 2 + 2;alert( a ); // 4alert( b ); // 4alert( c ); // 4
1、首先,对最右边的表达式2 + 2求值,
2、然后将其赋给左边的变量:c、b和a。
3、最后,所有的变量共享一个值。
二、同样,出于可读性,最好将这种代码分成几行:
c = 2 + 2;b = c;a = c;
1、这样可读性更强,尤其是在快速浏览代码的时候。
