JavaScript 賦值運算
■知識點
賦值運算有以下兩種形式。
簡單的賦值運算(=):把等號右側(cè)操作數(shù)的值,直接復制給左側(cè)的操作數(shù),因此左側(cè)操作數(shù)的值會發(fā)生變化。
附加操作的賦值運算:賦值之前先對右側(cè)操作數(shù)執(zhí)行某種操作,然后把運算結(jié)果再復制給左側(cè)操作數(shù),具體說明如表所示。
賦值運算符 | 說 明 | 示 例 | 等效于 |
+= | 加法運算或連接操作并賦值 | 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 |
■實例設計
使用賦值運算符設計復雜的連續(xù)賦值表達式。
var a = b = c = d = e = f = 100; //連續(xù)賦值
//在條件語句的小括號內(nèi)進行連續(xù)賦值
for(var a = b = 1; a < 5; a ++ ){ console.log(a + "" + b ); }
賦值運算符的結(jié)合性是從右向左,所以最右側(cè)的賦值運算先執(zhí)行,然后再向左賦值,以此類推,所以連續(xù)賦值運算不會引發(fā)異常。
在下面的表達式中,邏輯與左側(cè)的操作數(shù)是一個賦值表達式,右側(cè)的操作數(shù)也是一個賦值表達式,但是左側(cè)賦的值是一個簡單值,右側(cè)是把一個函數(shù)賦值給變量b。
在邏輯與運算中,左側(cè)的賦值并沒有真正地復制給變量a,當邏輯與運算執(zhí)行右側(cè)的表達式時,該表達式是把一個函數(shù)賦值給變量b,然后利用小括號運算符調(diào)用這個函數(shù),返回變量a的值,結(jié)果并沒 有返回變量a的值為6,而是undefined。
var a; //定義變量a
console.log(a = 6 && (b = function(){ //邏輯與運算表達式
return a; //返回變量a的值
})()
); //結(jié)果返回undefined
由于賦值運算作為表達式使用具有副作用,使用時要慎重,確保不會引發(fā)風險。對于上面的表達式,更安全的寫法如下。
var a = 6; //定義并初始化變量a
b = function 0 { //定義函數(shù)對象b
return a;
}
console, log (a && b()); //邏輯與運算,根據(jù)a決定是否調(diào)用函數(shù)b
點擊加載更多評論>>