逻辑或 (||)
一组操作数的**逻辑或 (||
)** (逻辑析取) 运算符当且仅当一个或多个操作数为真时才为真。它通常与布尔 (逻辑) 值一起使用。当它使用时,它返回一个布尔值。但是,||
运算符实际上返回指定操作数之一的值,因此,如果此运算符与非布尔值一起使用,它将返回非布尔值。
试一试
语法
js
x || y
描述
短路求值
逻辑或表达式从左到右求值,它使用以下规则测试可能的“短路”求值
(some truthy expression) || 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 语言规范 # prod-LogicalORExpression |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。