寫了這么多JS,才發現JS的語法既是屬於C語系的,又與一般C語系的編程語言某些地方有很大區別,其中&&和||就是其中一例。
C語系中的&&和||
C語系的&&和||有一個特點,無論你把表達式寫的天花亂墜,都會返回一個布爾值。
1,&&
兩邊條件都為true時,結果才為true;
如果有一個為false,結果就為false;
當第一個條件為false時,就不再判斷后面的條件;
注意:當數值參與邏輯與運算時,結果為true,那么會返回的會是第二個為真的值;如果結果為false,返回的會是第一個為假的值。
2,||
只要有一個條件為true時,結果就為true;
當兩個條件都為false時,結果才為false;
當一個條件為true時,后面的條件不再判斷;
注意:當數值參與邏輯或運算時,結果為true,會返回第一個為真的值;如果結果為false,會返回第二個為假的值;
JS中的&&和||
1,JS中的&&和||,當出現在條件判斷語句中時,例如if,會遵守C語系規則。
2,JS中的&&和||,當初現在賦值語句中時,例如變量賦值、return結果等,會遵循以下規則:
表達式a && 表達式b : 計算表達式a(也可以是函數)的運算結果,
如果為 True, 執行表達式b(或函數),並返回b的結果;
如果為 False,返回a的結果;
表達式a || 表達式b : 計算表達式a(也可以是函數)的運算結果,
如果為 Fasle, 執行表達式b(或函數),並返回b的結果;
如果為 True,返回a的結果;
例1:
1 let b, c, d; 2 b = true || 0;//b=true;
3 c = false || 0;//c=0;
4 d = 1 || 0;//d=1;
例2:
1 //將數組中布爾值為false的成員轉為0
2 Array.from([1, , 2, , 3], (n) => n || 0) 3 // [1, 0, 2, 0, 3]