Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. 表达式和运算符
  5. 逻辑或(||)

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

逻辑或(||)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2015年7月⁩.

对于一组操作数的逻辑或||,逻辑析取)运算符,当且仅当其一个或多个操作数为真,其运算结果为真。它通常与布尔(逻辑)值一起使用。当它是布尔值时,返回一个布尔值。然而,|| 运算符实际上是返回一个指定的操作数的值,所以如果这个运算符被用于非布尔值,它将返回一个非布尔值。

尝试一下

const a = 3;const b = -2;console.log(a > 0 || b > 0);// Expected output: true

语法

js
expr1 || expr2

描述

如果expr1 能转化为true,返回expr1;否则返回expr2

能够转化为true 的值叫做真值,能够转化为false 的值叫做假值

能够转化为 false 的表达式的示例如下:

  • null
  • NaN
  • 0
  • 空字符串(""''``);
  • undefined

尽管|| 运算符可以与非布尔操作数一起使用,但它仍然被认为是一个布尔运算符,因为它的返回值总是可以被转换为布尔基本类型。要明确地将其返回值(或任何一般的表达式)转换为相应的布尔值,请使用双非运算符Boolean 构造函数。

短路求值

逻辑或从左到右进行求值,它使用如下规则进行“短路”测试:

(some truthy expression) || expr 被短路评估为真值。

短路意味着上面的expr 部分不被求值,因此不会发生任何副作用(例如,如果expr 是一个函数调用,调用就不会发生)。这是因为在对第一个操作数进行评估后,操作数的值已经确定。参见下述示例:

js
function A() {  console.log("调用了 A");  return false;}function B() {  console.log("调用了 B");  return true;}console.log(B() || A());// 由于调用了 B 函数,故会输出 "called B" 到控制台,// 然后输出 true(运算符的运算结果)

运算符优先级

以下表达式看起来等价,但实际上不是,因为&& 运算符比|| 运算符先执行(参见运算符优先级)。

js
true || false && false; // 返回 true,因为 && 先执行(true || false) && false; // 返回 false,因为分组运算符优先级更高

示例

使用或运算符

下列代码展示了||(逻辑或)运算符的用法。

js
true || true; // t || t returns truefalse || true; // f || t returns truetrue || false; // t || f returns truefalse || 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 falsefalse || ""; // f || f returns ""false || varObject; // f || object returns varObject

备注:如果你使用这个操作符为某些变量提供默认值,要注意任何值都不会被使用。如果你只需要过滤掉nullundefined,可以考虑使用空值合并运算符

布尔值转化规则

与运算符转化为或运算符

下述涉及到布尔运算符的运算:

js
bCondition1 && bCondition2

总是与此表达式相同:

js
!(!bCondition1 || !bCondition2)

或运算符转化为与运算符

下述涉及到布尔运算符的运算:

js
bCondition1 || bCondition2

总是与此表达式相同:

js
!(!bCondition1 && !bCondition2)

去除嵌套的括号

由于逻辑表达式是从左到右进行求值的,只要遵循一定的规则,总是可以从一个复杂的表达式中删除括号。

下述涉及到布尔运算符的复杂运算:

js
bCondition1 && (bCondition2 || bCondition3)

总是与此表达式相同:

js
!(!bCondition1 || !bCondition2 && !bCondition3)

规范

Specification
ECMAScript® 2026 Language Specification
# prod-LogicalORExpression

浏览器兼容性

参见

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp