赋值运算符

简单的赋值操作符由等号'='表示,作用是把等号右边的值赋予等号左边的变量或属性。

i = o;
o.x = 1;

'='运算符希望它的左操作数是一个左值:一个变量或者对象属性(或数组元素)。它的右操作数可以是任意类型
的任意值。赋值表达式的值就是右操作数的值。
尽管赋值表达式通常非常简单,但有时仍会看到一些复杂表达式包含赋值表达式的情况。例如,可以将赋值
和关系操作符放在一个表达式中,就像这样:

(a=b) == 0

如果这样做的话,应该清楚知道'='和'=='运算符之间的区别。'='具有非常低的优先级,通常在一个较长的
表达式中用到了一条赋值语句的值时的时候,需要补充圆括号以保证正确的运算顺序。

赋值操作符的结合性是从右到左。即,如果一个表达式中出现了多个赋值运算符,运算顺序是从右到左。
因此,可以通过如下方式来对多个变量赋值:

i = j = k = 0;  // 把三个变量初始化为0

JS还提供了11个复合的赋值运算符:先进行指定运算,然后将得到的值返回给左边的变量。

[注意]设计这些操作符的目的是简化赋值操作,使用它们并不会带来任何性能的提升。

total += sales_tax;
//等价于
total = total + sales_tax;

运算符      示例        等价于
+=         	a+=b       	a=a+b
-=         	a-=b       	a=a-b
*=         	a*=b       	a=a*b
/=         	a/=b       	a=a/b
%=         	a%=b       	a=a%b
<<=        	a<<=b       a=a<<b
>>=        	a>>=b      	a=a>>b
>>>=       	a>>>=b     a=a>>>b
&=         	a&=b       	 a=a&b
|=         	a|=b      	 a=a|b
^=         	a^=b      	 a=a^b

在大多数情况下,表达式为: a op= b
这里op代表一个运算符,这个表达式和下面的表达式等价:
	a = a op b

在第一行中,表达式a计算了一次,在第二行中,表达式a计算了两次,只有在a包含具有副作用的表达式
(比如函数调用和赋值操作)的时候,两者才不等价。

data[i++]*=2;
data[i++] = data[i++]*2;

var data = [0,1,2],i=0;
data[++i]+=10;
console.log(data);//[0,11,2]
var data = [0,1,2],i=0;
data[++i]= data[++i] + 10;
console.log(data);//[0,12,2]