邏輯或 (||)
邏輯或 (||)(邏輯析取)運算子對於一組運算元而言,當且僅當其一個或多個運算元為真時,其結果為真。它通常與布林(邏輯)值一起使用。在這種情況下,它會返回一個布林值。然而,|| 運算子實際上會返回其中一個指定運算元的值,因此,如果此運算子與非布林值一起使用,它將返回一個非布林值。
試一試
const a = 3;
const b = -2;
console.log(a > 0 || b > 0);
// Expected output: true
語法
js
x || y
描述
如果 x 可以轉換為 true,則返回 x;否則,返回 y。
如果一個值可以轉換為 true,則該值被稱為真值 (truthy)。如果一個值可以轉換為 false,則該值被稱為假值 (falsy)。
可以轉換為 false 的表示式示例有:
null;NaN;0;- 空字串(
""或''或``); undefined.
儘管 || 運算子可以與非布林值運算元一起使用,但它仍然可以被認為是布林運算子,因為其返回值總是可以轉換為布林原始值。要將其返回值(或通常的任何表示式)顯式轉換為相應的布林值,請使用雙非運算子或Boolean() 建構函式。
短路求值
邏輯或表示式從左到右進行評估,它使用以下規則進行可能的“短路”評估:
(某個真值表達式) || expr 會短路評估為該真值表達式。
短路意味著上述 expr 部分**不進行評估**,因此任何這樣做的副作用都不會生效(例如,如果 expr 是一個函式呼叫,則該呼叫永遠不會發生)。發生這種情況是因為在評估第一個運算元後,運算子的值已經確定。請參閱示例:
js
function A() {
console.log("called A");
return false;
}
function B() {
console.log("called B");
return true;
}
console.log(B() || A());
// Logs "called B" due to the function call,
// then logs true (which is the resulting value of the operator)
運算子優先順序
以下表達式可能看起來等效,但它們不是,因為 && 運算子在 || 運算子之前執行(請參閱運算子優先順序)。
js
true || false && false; // returns true, because && is executed first
(true || false) && false; // returns false, because grouping has the highest precedence
示例
使用 OR
以下程式碼展示了 ||(邏輯或)運算子的示例。
js
true || true; // t || t returns true
false || true; // f || t returns true
true || false; // t || f returns true
false || 3 === 4; // f || f returns false
"Cat" || "Dog"; // t || t returns "Cat"
false || "Cat"; // f || t returns "Cat"
"Cat" || false; // t || f returns "Cat"
"" || false; // f || f returns false
false || ""; // f || f returns ""
false || varObject; // f || object returns varObject
布林值的轉換規則
將 AND 轉換為 OR
以下涉及布林值的操作
js
bCondition1 && bCondition2
始終等於
js
!(!bCondition1 || !bCondition2)
將 OR 轉換為 AND
以下涉及布林值的操作
js
bCondition1 || bCondition2
始終等於
js
!(!bCondition1 && !bCondition2)
移除巢狀括號
由於邏輯表示式從左到右進行評估,因此總是可以根據某些規則從複雜表示式中移除括號。
以下涉及布林值的複合操作
js
bCondition1 && (bCondition2 || bCondition3)
始終等於
js
!(!bCondition1 || !bCondition2 && !bCondition3)
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # prod-LogicalORExpression |
瀏覽器相容性
載入中…