JavaScript 邏輯運算符
邏輯運算符通常用于布爾型(邏輯)值。這種情況下,它們返回一個布爾值。然而,&& 和 || 運算符會返回一個指定操作數的值,因此,這些運算符也用于非布爾值。這時,它們也就會返回一個非布爾型值?!?MDN
邏輯運算符用于邏輯運算。如變量 num
要大于2同時
也要小于 7,這里的同時就是一種邏輯運算。
JavaScript 中的邏輯運算有三種:
&&
與 (并且)||
或 (或者)!
非 (取反)
1. 與
語法:
表達式1 && 表達式2
如果表達式1的結果成立則返回表達式2的結果,否則返回表達式1的結果
與可以理解為且、并且、同時。與在 JavaScript 使用 &&
表示。
true && true; // true
true && false; // false
false && true; // false
false && false; // false
與操作在左側的表達式結果為 true
或者可以隱式轉換為true
的時候,會返回右側表達式結果,否則返回左側表達式結果。
如:判斷成績是否處于 80 到 100 之間。
80 到 100 之間換一種表述方式就是,成績大于等于 80 并且成績小于等于100,這種表述形式更像程序語言,所以條件就是分數 >= 80 并且 分數 <= 100
。
var score= 67;
if (score >= 80 && score <= 100) {
console.log(score + '分在80到100之間');
} else {
console.log(score + '分不在80到100之間');
}
if 語句中的條件左右都不滿足,所以返回了表達式 score >= 80
的結果false。
如果 score
為 90,則滿足兩個條件,返回右側表達式的結果。
2. 或
語法:
表達式1 || 表達式2
如果表達式1結果成立,則返回表達式 1 的結果,否則返回表達式 2 的結果
或就是或者。在 JavaScript 中使用 ||
表示。
或操作符在當有表達式的結果為 true 或者可以隱式轉換為 true 的時候,就返回這個表達式的結果,如果沒有則返回右側表達式的結果。
true || true; // true
true || false; // true
false || true; // true
false || false; // false
如:判斷一個數能被 3 整除或者能被 5 整除。
能被 3 或者 5 整除的數,表述成類似于計算機語言的樣子就是某個數 % 3 === 0 或者 某個數 % 5 === 0
。
var number = 15;
if (number % 3 === 0 || number % 5 === 0) {
console.log(number + '可以被3或5整除');
} else {
console.log(number + '不可以被3或5整除');
}
// 輸出:15可以被3或5整除
3. 非
語法:
!表達式
非就是取反。表達式結果如果是布爾值,則會直接取反,結果如果不是布爾值,則會轉換成布爾值再取反。
取反即將 true
變成 false
,或者將 false
變成 true
。
!true; // false
!false; // true
!0; // true
!''; // true
!1; // false
不僅在日常編碼中很常用到非,在許多代碼壓縮工作中也會用到非,如將 true 壓縮成 !0,false 壓縮成 !1,從 4 個字符和 5 個字符壓縮到 2 個字符。
4. 雙重非
雙重非就是使用兩個非,通常用于將一種數據類型轉換成布爾值。
!!1; // true
首先 !1
會得到結果 false
,再通過 !false
就會得到結果 true
。
5. 短路邏輯
短路邏輯是一種邏輯運算符的求值策略,還可以稱作短路求值、最小化求值。
JavaScript 在進行與或計算的時候就會用到短路邏輯。
如:判斷一個數是 2 的倍數同時又是 5 的倍數。
var number = 7;
number % 2 === 0 && number % 5 === 0;
number 不滿足任意一個條件,&&
操作符碰到不成立的表達式就會直接返回這個表達式。
顯然 number % 2 === 0
就不成立,所以直接返回這個表達式的結果,這樣一個邏輯運算就已經得出結果了,JavaScript 不會再計算右側的表達式。
這就是短路邏輯,只要得出了結果,就不會再繼續計算。
6. 小結
JavaScript 中有與&&
、或||
、非!
三種邏輯運算符,用于處理值之間的邏輯關系,當需要多個條件的相互關系來決定結果的時候,就會用到邏輯運算符。