赋值运算符(assignment operator)是将右边操作数(right operator)的值赋值给左边的操作数(left operator)
如果在等号( = )前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。这种复合赋值操作相当于是对常规表达式的简写。
var num = 10; num = num +10; //等价于 var num = 10; num += 10;
每个主要算数运算符(以及个别的其他操作符)都有对应的符合赋值操作符,这些操作符如下:
名称 | 简写 | 含义 |
赋值(Assignment) | a = b | a = b |
加赋值(Addition assignment) | a += b | a = a + b |
减赋值(Subtraction assignment) | a -= b | a = a - b |
乘赋值(Multiplication assignment) | a *= b | a = a * b |
除赋值(Division assigment) | a /= b | a = a / b |
模赋值(Remainder assignment) | a %= b | a = a % b |
指数赋值(Exponentiation assignment) | a **= b |
a = a ** b |
左移赋值(Left shift assignment) | a <<= b | a = a << b |
右移赋值(Right shift assignment) | a >>= b |
a = a >> b |
无符号右移赋值(Unsigned right shift assignment) | a >>>= b |
a = a >>> b |
按位与赋值(Bitwise AND assignment) | a &= b | a = a & b |
按位异或赋值(Bitwise XOR assignment) | a ^= b | a = a ^ b |
按位或赋值(Bitwise OR assignment) | a |= b | a = a | b |
一、赋值
简单的赋值运算,就是将一个值赋给一个变量。
如果想把一个值赋给多个变量,可以采用链式使用赋值运算符。
语法:
a = b
实例:
// 假设有以下变量
a = 2;
b = 9;
c = 7;
a = b;
//将 b的值赋给 a,所以a 的值为 9
a = b = c
//将 c 的值赋给 b,b的值是 7,再将 b的值赋给 a,所以 a、b、c的值都是 7
二、加赋值
加赋值运算符把一个右值和一个变量相加,然后把相加的变量赋值给该变量。
两个操作符的类型决定加赋值运算符的行为。算数相加或是字符串连接都有可能。
语法:
a += b //等价于 a = a + b
实例:
//定义下列变量 aa = 'aa'; bb = 8; cc = true //加赋值运算遵循着算数加运算符的规则 bb += 1 // 数字相加 9;实例: cc += 8 //布尔值与数字相加 9 aa += false // 布尔值与字符串相加 'aafalse' aa += bb // 布尔值与数字相加拼串 'aa8'
三、减赋值
减赋值运算符使一个变量减去右值,然后把结果赋给变量。
语法:
a -= b //等价于 a = a - b
实例:
// 定义下面的变量 // aa = 2 aa -= 3 //aa的值为 -1 aa -= 'wo' //返回值为 NaN
四、除赋值
除赋值运算符使一个变量除以右面的值,并且将结果赋值给该变量。
语法:
a /= b //等价于 a = a / b
实例:
// 假定已定义了下面的变量 // aa= 5 aa /= 2 // 2.5 aa /= "foo" // NaN aa /= 0 // Infinity
五、模赋值
模赋值运算使一个变量除以右值,然后把余数赋值给该变量。
语法:
a %= b //等价于 a = a % b
实例:
//假设一个变量 a = 5 a %= 2 // 1 a %= 'foo' // NaN a %= 0 // NaN
六、左移赋值
左移赋值运算符使变量向左移动指定位数的比特位,然后将结果赋给该变量。
语法:
a <<= b //等价于 a = a << b
实例:
var aa = 5; // (00000000000000000000000000000101) aa <<= 2; // 20 (00000000000000000000000000010100)
七、右移赋值
右移赋值运算符使变量向右移动指定位数的比特位,然后将结果赋值给变量
语法:
a >>>= b //等价于 a = a >>> b
实例:
var bar = 5; // (00000000000000000000000000000101) bar >>= 2; // 1 (00000000000000000000000000000001) var bar = -5; // (-00000000000000000000000000000101) bar >>= 2; // -2 (-00000000000000000000000000000010)
八、无符号右移赋值
无符号右移赋值运算符向右移动指定数量的比特位,然后把结果赋给变量
语法:
a >>>= b //等价于 a = a >>> b
实例:
var bar = 5; // (00000000000000000000000000000101) bar >>>= 2; // 1 (00000000000000000000000000000001) var bar = -5; // (-00000000000000000000000000000101) bar >>>= 2; // 1073741822 (00111111111111111111111111111110)
九、按位与赋值
按位与赋值使用两个操作值的二进制进行表示,执行二进制异或运算,并且把结果赋值给变量。
语法:
a ^= b //等价于 a = a ^ b
实例:
var bar = 5; // 5: 00000000000000000000000000000101 // 2: 00000000000000000000000000000010 bar &= 2; // 0
十、按位或赋值
按位或运算符使用两个操作值的二进制进行表示,执行按位或运算,并且把结果赋给变量。
语法:
a |= b
//等价于
a = a | b
实例:
var bar = 5;
bar |= 2; // 7
// 5: 00000000000000000000000000000101
// 2: 00000000000000000000000000000010
// -----------------------------------
// 7: 00000000000000000000000000000111
参考资料:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Assignment_Operators