js運算符 && 與 || 的用法
一、先來說說||(邏輯或),從字面上來說,只有前後都是false的時候才返回false,否則返回true。
alert(true||false); // true
alert(false||true); // true
alert(true||true); // true
alert(false||false); // false
但是,從深層意義上來說的話,卻有另一番天地,試下面代碼
alert(0||1);
顯然,我們知道,前面0意味著false,而後面1意味著true,那麽上面的結果應該是true,而事實返回的結果是1。再看下面代碼:
alert(2||1);
我們知道,前面2是true,後面1也是true,那返回結果又是什麽呢?測試結果是2,繼續看:
alert(‘a‘||1);
同樣,前面‘a‘是true,後面1也是true;測試結果是‘a‘,下面
alert(‘‘||1);
由上,我們知道前面‘‘是false,後面1是true,而返回結果是1。再看下面
alert(‘a‘||0);
前面‘a‘是true,而後面0是false,返回結果是‘a‘,繼續下面
alert(‘a‘||‘b‘);
前面‘a‘是true,後面‘b‘是false,返回結果是‘a‘,我們繼續下面
alert(‘‘||0);
前面‘‘是false,後面0同樣是false,返回結果是0
alert(0||‘‘);
前面0是false,後面‘‘是false,返回結果是‘‘
這就意味
1、只要“||”前面為false,不管“||”後面是true還是false,都返回“||”後面的值。
2、只要“||”前面為true,不管“||”後面是true還是false,都返回“||”前面的值。
讓我們總結一下:
1、只要“||”前面為false,無論“||”後面是true還是false,結果都返回“||”後面的值。
2、只要“||”前面為true,無論“||”後面是true還是false,結果都返回“||”前面的值。
3、只要“&&”前面是false,無論“&&”後面是true還是false,結果都將返“&&”前面的值;
4、只要“&&”前面是true,無論“&&”後面是true還是false,結果都將返“&&”後面的值;
由上兩個測試可知,邏輯運算符,“||”和“&&”都是遵行短路原則,只要確定符號前面的真假,既可確定返回值。
需要說明的是“&&”的優先級是高於“||”的,下面測試:
alert(1||‘a‘&&2);
返回結果是1。
根據反證原理,我們假設“||”的優先級不低於“&&”(這裏只所以用“不低於”,是為了同時證明等級相同的情況)。
根據上面我們得出的結論(1),(1||‘a‘)將返回前面的值1,(1&&2)根據結論(4)應該返回後面的值2。這顯然不對,由此可知“&&”的優先級是高於“||”的。
js運算符 && 與 || 的用法