1. 程式人生 > 其它 >js中的 || 與 && 運算子自己的理解

js中的 || 與 && 運算子自己的理解

js中的 || 與 && 運算子自己的理解

學js的時候遇到運算子的問題,根據一位博主的說法,有了大致的瞭解,已經介紹的很詳細了,我這邊也貼過來。原文地址

js中邏輯運算子在開發中可以算是比較常見的運算子了,主要有三種:>邏輯與&&、邏輯或||和邏輯非!。
當&&和|| 連線語句時,兩邊的語句會轉化為布林型別(Boolean),然後再進行運算,具體的運算規則如下:

關於&&

  1. 兩邊條件都為true時,結果才為true;
  2. 如果有一個為false,結果就為false;
  3. 當第一個條件為false時,就不再判斷後面的條件
  4. 注意:當數值參與邏輯與運算時,結果為true,那麼會返回的會是第二個為真的值;如果結果為false,返回的會是第一個為假的值。

關於||

  1. 只要有一個條件為true時,結果就為true;
  2. 當兩個條件都為false時,結果才為false;
  3. 當一個條件為true時,後面的條件不再判斷
  4. 注意:當數值參與邏輯或運算時,結果為true,會返回第一個為真的值;如果結果為false,會返回第二個為假的值;

關於!

  1. 當條件為false時,結果為true;反之亦然。

關於1、2、3點其實沒有太大的疑惑,但是關於第四點,作者給了個例子

console.log( 5 && 4 );//當結果為真時,返回第二個為真的值4 
console.log( 0 && 4 );//當結果為假時,返回第一個為假的值0 
console.log( 5 || 4 );//當結果為真時,返回第一個為真的值5 
console.log( 0 || 0 );//當結果為假時,返回第二個為假的值0 
console.log((3||2)&&(5||0));//5 
console.log(!5);//false 

剛開始不太理解,直接真的都返回第一個,假的都返回第二個不就行了,這樣似乎不好記憶。
不過後來領悟了一下, || 運算子 又叫短路運算子,顧名思義,遇到通的路,他就直接走通了,不用再管後面的路線通斷情況,所以像這樣的式子(字串、字元等什麼會被判定為true,什麼會被判定為false,參照其他文章)

console.log( 5 || 4 || undefined || 'a' || 'aaa');//返回5
console.log( 0 || 4 || undefined || 'a' || 'aaa');//返回4
console.log( 0 || 0 || undefined || 'a' || 'aaa');//返回a

不論後面有多長,都只要找到第一個為真的情況就行了,如果一直沒找到,就一直找到最後一個,這也符合人類的正常思考習慣


同理對於 && 運算子也是如此,區別是它找到第一個為假的情況就行了

console.log( 5 && 4 && undefined && 'a' && 'aaa');//返回undefined
console.log( 5 && 0 && undefined && 'a' && 'aaa');//返回0
console.log( '' && 0 && undefined && 'a' && 'aaa');//返回

所以依照我的理解,這兩句話

當數值參與邏輯與運算時,結果為true,那麼會返回的會是第二個為真的值;如果結果為false,返回的會是第一個為假的值。
當數值參與邏輯或運算時,結果為true,會返回第一個為真的值;如果結果為false,會返回第二個為假的值;

嚴謹來說,是這樣的(同一個符號連續使用的情況):
當數值參與邏輯與運算時,會返回第一個為假的值,若沒有假的值,則返回最後一個值
當數值參與邏輯或運算時,會返回第一個為真的值,若沒有假的值,則返回最後一個值