JavaScript 邏輯或運算
■知識點
邏輯或運算(||):如果兩個操作數(shù)都為true,或者其中一個為true,就返回true,否則返回false。邏輯或也是一種短路邏輯:如果左側(cè)表達式為true,則直接短路返回結(jié)果,不再運算右側(cè)表達式。運算邏輯如下。
第1步,計算第1個操作數(shù)(左側(cè)表達式)的值。
第2步,檢測第1個操作數(shù)的值。如果左側(cè)表達式的值可以轉(zhuǎn)換為tme,那么就會結(jié)束運算,直接返回第1個操作數(shù)的值。停止后面的操作步驟。
第3步,如果第1個操作數(shù)可以轉(zhuǎn)換為false,則計算第2個操作數(shù)(右側(cè)表達式)的值。
第4步,返回第2個操作數(shù)的值。
■實例設計 針對下面4個表達式:
var n = 3;
(n == 1) &&console.log (1);
(n == 2) &&console.log (2);
(n == 3) &&console.log (3);
(! n) &&console.log("null");
可以使用邏輯或?qū)ζ溥M行合并:
var n = 3;
(n == 1) &&console.log (1) | |
(n == 2) &&console.log (2) | |
(n == 3) &&console.log (3) | |
(! n) &&console.log (,fnulln);
由于&&運算符的優(yōu)先級高于ii運算符的優(yōu)先級,所以不必使用小括號進行分組。如果使用小括號分組后,代碼更容易閱讀。
var n = 3;
((n == 1) &&console.log(1) ) || //為true時,結(jié)束并返回該行值
((n == 2) &&console.log(2)) || //為true時,結(jié)束并返回該行值
((n == 3) &&console.log(3) ) || //為true時,結(jié)束并返回該行值
((! n) &&console.log(nnulln)); //為true時,結(jié)束并返回該行值
下面的代碼設計一個復雜的嵌套結(jié)構(gòu),根據(jù)變量a決定是否執(zhí)行一個循環(huán)。
var a = b = 2; //定義并連續(xù)初始化
if (a){ //條件結(jié)構(gòu)
while(b ++ < 10){ //循環(huán)結(jié)構(gòu)
console.log(b ++); //循環(huán)執(zhí)行語句
}
使用邏輯與和邏輯或運算符進行簡化:
var a = b = 2; //定義并連續(xù)初始化
if(a){ //條件結(jié)構(gòu)
while(b ++ < 10){ //循環(huán)結(jié)構(gòu)
console.log(b ++); //循環(huán)執(zhí)行語句
}
}
使用邏輯與和邏輯或運算符進行簡化:
var a = b = 2; //定義并連續(xù)初始化
while(a && b ++ < 10) console.log(b++); //邏輯與運算符合并的多條件表達式
如果轉(zhuǎn)換為如下嵌套結(jié)構(gòu)就不能夠繼續(xù)使用上述表達式進行簡化。因為下面的代碼是先執(zhí)行循環(huán)體,后執(zhí)行條件檢測。
while(b ++ < 10){ //先執(zhí)行循環(huán)
if(a){ //再判斷條件
console.log(b++);
}
}
點擊加載更多評論>>