javascript邏輯運算符「||」和「&&」

1、先來講說||(邏輯或),從字面上來講,只有先後都是false的時候才返回false,不然返回true。測試

alert(true||false);    // true
alert(false||true); // true
alert(true||true); // true
alert(false||false); // false

可是,從深層意義上來講的話,卻有另外一番天地,試下面代碼code

alert(0||1);

顯然,咱們知道,前面0意味着false,然後面1意味着true,那麼上面的結果應該是true,而事實返回的結果是1。再看下面代碼:blog

alert(2||1);

咱們知道,前面2是true,後面1也是true,那返回結果又是什麼呢?測試結果是2,繼續看:class

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',咱們繼續下面di

alert(''||0);

 前面''是false,後面0一樣是false,返回結果是0co

alert(0||'');

前面0是false,後面''是false,返回結果是''運算符

 

這就意味

一、只要「||」前面爲false,無論「||」後面是true仍是false,都返回「||」後面的值。

二、只要「||」前面爲true,無論「||」後面是true仍是false,都返回「||」前面的值。

 

----------------------------------------------------------------------------------------------------------


2、下面說說&&(邏輯與),從字面上來講,只有先後都是true的時候才返回true,不然返回false。

alert(true&&false);    // false
alert(true&&true); // true
alert(false&&false); // false
alert(false&&true); // false

而後,根據上面經驗,咱們看看「&&」號先後,不僅僅是布爾類型的狀況。

alert(''&&1);

結是返回'',「&&」前面''是false,後面是1是true。

alert(''&&0);

結是返回'',「&&」前面''是false,後面是0也是false。

alert('a'&&1);

結是返回1,「&&」前面''a是true,後面是1也是true。

alert('a'&&0);

結是返回0,「&&」前面''a是true,後面是0是false。

alert('a'&&'');

結是返回'',「&&」前面''a是true,後面是''是false。

alert(0&&'a');

結是返回0,「&&」前面''0是false,後面是'a'是true。

alert(0&&'');

結是返回0,「&&」前面''0是false,後面是''也是false。

 

這意味着

一、只要「&&」前面是false,不管「&&」後面是true仍是false,結果都將返「&&」前面的值;

二、只要「&&」前面是true,不管「&&」後面是true仍是false,結果都將返「&&」後面的值;

 

 

讓咱們總結一下:

一、只要「||」前面爲false,不管「||」後面是true仍是false,結果都返回「||」後面的值。

二、只要「||」前面爲true,不管「||」後面是true仍是false,結果都返回「||」前面的值。

三、只要「&&」前面是false,不管「&&」後面是true仍是false,結果都將返「&&」前面的值;

四、只要「&&」前面是true,不管「&&」後面是true仍是false,結果都將返「&&」後面的值;


由上兩個測試可知,邏輯運算符,「||」和「&&」都是遵行短路原則,只要肯定符號前面的真假,既可肯定返回值。

須要說明的是「&&」的優先級是高於「||」的,下面測試:

alert(1||'a'&&2);

返回結果是1。

根據反證原理,咱們假設「||」的優先級不低於「&&」(這裏只因此用「不低於」,是爲了同時證實等級相同的狀況)。

根據上面咱們得出的結論(1),(1||'a')將返回前面的值1,(1&&2)根據結論(4)應該返回後面的值2。這顯然不對,由此可知「&&」的優先級是高於「||」的。

相關文章
相關標籤/搜索