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