javascript邏輯運算子“||”和“&&”

來源:互聯網
上載者:User

標籤:javascrip   布爾類型   優先順序   先來   ack   back   邏輯   html   bsp   

原文: http://www.cnblogs.com/pigtail/archive/2012/03/09/2387486.html

一、先來說說||(邏輯或),從字面上來說,只有前後都是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,都返回“||”前面的值。

 

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


二、下面說說&&(邏輯與),從字面上來說,只有前後都是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。

 

這意味著

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。這顯然不對,由此可知“&&”的優先順序是高於“||”的。

javascript邏輯運算子“||”和“&&”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.