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