一横朋、先來(lái)說(shuō)說(shuō)||(邏輯或),從字面上來(lái)說(shuō),只有前后都是false的時(shí)候才返回false,否則返回true璧眠。
alert(true||false); // true
alert(false||true); // true
alert(true||true); // true
alert(false||false); // false
但是,從深層意義上來(lái)說(shuō)的話读虏,卻有另一番天地责静,試下面代碼
alert(0||1);
顯然,我們知道盖桥,前面0意味著false,而后面1意味著true,那么上面的結(jié)果應(yīng)該是true,而事實(shí)返回的結(jié)果是1灾螃。再看下面代碼:
alert(2||1);
我們知道,前面2是true,后面1也是true,那返回結(jié)果又是什么呢揩徊?測(cè)試結(jié)果是2,繼續(xù)看:
alert('a'||1);
同樣腰鬼,前面'a'是true,后面1也是true;測(cè)試結(jié)果是'a',下面
alert(''||1);
由上塑荒,我們知道前面''是false,后面1是true,而返回結(jié)果是1熄赡。再看下面
alert('a'||0);
前面'a'是true,而后面0是false,返回結(jié)果是'a'齿税,繼續(xù)下面
alert('a'||'b');
前面'a'是true,后面'b'是false,返回結(jié)果是'a'彼硫,我們繼續(xù)下面
alert(''||0);
前面''是false,后面0同樣是false,返回結(jié)果是0
alert(0||'');
前面0是false,后面''是false,返回結(jié)果是''
這就意味
1拧篮、只要“||”前面為false,不管“||”后面是true還是false溜在,都返回“||”后面的值。
2他托、只要“||”前面為true,不管“||”后面是true還是false掖肋,都返回“||”前面的值。
二赏参、下面說(shuō)說(shuō)&&(邏輯與),從字面上來(lái)說(shuō)志笼,只有前后都是true的時(shí)候才返回true,否則返回false把篓。
alert(true&&false); // false
alert(true&&true); // true
alert(false&&false); // false
alert(false&&true); // false
然后纫溃,根據(jù)上面經(jīng)驗(yàn),我們看看“&&”號(hào)前后韧掩,不單單是布爾類型的情況紊浩。
alert(''&&1);
結(jié)是返回'',“&&”前面''是false,后面是1是true。
alert(''&&0);
結(jié)是返回'',“&&”前面''是false,后面是0也是false疗锐。
alert('a'&&1);
結(jié)是返回1,“&&”前面''a是true,后面是1也是true坊谁。
alert('a'&&0);
結(jié)是返回0,“&&”前面''a是true,后面是0是false。
alert('a'&&'');
結(jié)是返回'',“&&”前面''a是true,后面是''是false滑臊。
alert(0&&'a');
結(jié)是返回0,“&&”前面''0是false,后面是'a'是true口芍。
alert(0&&'');
結(jié)是返回0,“&&”前面''0是false,后面是''也是false。
這意味著
1雇卷、只要“&&”前面是false鬓椭,無(wú)論“&&”后面是true還是false,結(jié)果都將返“&&”前面的值;
2关划、只要“&&”前面是true小染,無(wú)論“&&”后面是true還是false,結(jié)果都將返“&&”后面的值;
讓我們總結(jié)一下:
1贮折、只要“||”前面為false裤翩,無(wú)論“||”后面是true還是false,結(jié)果都返回“||”后面的值脱货。
2岛都、只要“||”前面為true,無(wú)論“||”后面是true還是false振峻,結(jié)果都返回“||”前面的值臼疫。
3、只要“&&”前面是false扣孟,無(wú)論“&&”后面是true還是false烫堤,結(jié)果都將返“&&”前面的值;
4、只要“&&”前面是true,無(wú)論“&&”后面是true還是false鸽斟,結(jié)果都將返“&&”后面的值;
由上兩個(gè)測(cè)試可知拔创,邏輯運(yùn)算符,“||”和“&&”都是遵行短路原則富蓄,只要確定符號(hào)前面的真假剩燥,既可確定返回值。
需要說(shuō)明的是“&&”的優(yōu)先級(jí)是高于“||”的立倍,下面測(cè)試:
alert(1||'a'&&2);
返回結(jié)果是1灭红。
根據(jù)反證原理,我們假設(shè)“||”的優(yōu)先級(jí)不低于“&&”(這里只所以用“不低于”口注,是為了同時(shí)證明等級(jí)相同的情況)变擒。
根據(jù)上面我們得出的結(jié)論(1),(1||'a')將返回前面的值1寝志,(1&&2)根據(jù)結(jié)論(4)應(yīng)該返回后面的值2娇斑。這顯然不對(duì),由此可知“&&”的優(yōu)先級(jí)是高于“||”的材部。