JavaScript 邏輯與運(yùn)算
■知識(shí)點(diǎn)
邏輯與運(yùn)算(&&),只有兩個(gè)操作數(shù)都為true時(shí),才返回true,否則返回false。邏輯與是一種短路邏輯:如果左側(cè)表達(dá)式為false,則直接短路返回結(jié)果,不再運(yùn)算右側(cè)表達(dá)式。運(yùn)算邏輯如下。
第1步,計(jì)算第1個(gè)操作數(shù)(左側(cè)表達(dá)式)的值。
第2步,檢測(cè)第1個(gè)操作數(shù)的值。如果左側(cè)表達(dá)式的值可以轉(zhuǎn)換為false (null、underfilled、NaN、 0、""、false),那么就會(huì)結(jié)束運(yùn)算,直接返回第1個(gè)操作數(shù)的值。停止后面的操作步驟。
第3步,如果第1個(gè)操作數(shù)可以轉(zhuǎn)換為tme,則計(jì)算第2個(gè)操作數(shù)(右側(cè)表達(dá)式)的值。
第4步,返回第2個(gè)操作數(shù)的值。
■實(shí)例設(shè)計(jì)
下面的代碼利用邏輯與運(yùn)算檢測(cè)變量并進(jìn)行初始化。
var user; //定義變量
( ! user &&console.log("沒有賦值")); //返回提示信息“沒有賦值”
等效于:
var user; //定義變量
if( ! user){ //條件判斷
console.log("變量沒有賦值");
}
注意:
如果變量usei?值為0或空字符串等假值,轉(zhuǎn)換為布爾值時(shí),則為false,那么當(dāng)變量賦值之后,依然提示變量沒有賦值。因此,在設(shè)計(jì)時(shí)必須確保邏輯與左側(cè)的表達(dá)式返回值是一個(gè)可以預(yù)測(cè)的值。
var user = 0; //定義并初始化變蛩
( ! user &&console. log ("變量沒有賦值")); //返回提示信息??變M沒有賦值"
同時(shí),注意右側(cè)表達(dá)式不應(yīng)該包含賦值、遞增、遞減和函數(shù)調(diào)用等有效運(yùn)算,因?yàn)楫?dāng)左側(cè)表達(dá)式為false時(shí),則直接跳過右側(cè)表達(dá)式,會(huì)給后面的運(yùn)算帶來潛在影響。
使用邏輯與運(yùn)算符可以代替設(shè)計(jì)多重分支結(jié)構(gòu)。
var n = 3;
(n == 1) &&console.log(1);
(n == 2) &&console.log(2);
(n == 3) &&console.log(3);
(! n) &&console.log("null");
上面的代碼等效于下面多重分支結(jié)構(gòu):
var n = 3; //定義變量
switch (n){ //指定判斷的變量
case 1 : //條件1
console.log(1);
break; //結(jié)束結(jié)構(gòu)
case 2 : //條件2
console.log (2);
break; //結(jié)束結(jié)構(gòu)
case 3 : //條件3
console.log(3);
break; //結(jié)束結(jié)構(gòu)
default : //默認(rèn)條件
console.log ("null");
}
點(diǎn)擊加載更多評(píng)論>>