Logical OR (||)

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Toán tử logical OR (||) (phép tuyển logic) cho một tập hợp các toán hạng là true khi và chỉ khi một hoặc nhiều toán hạng của nó là true. Thông thường nó được sử dụng với các giá trị boolean (logical). Khi được dùng như vậy, nó trả về một giá trị Boolean. Tuy nhiên, toán tử || thực sự trả về giá trị của một trong các toán hạng đã chỉ định, vì vậy nếu toán tử này được sử dụng với các giá trị không phải Boolean, nó sẽ trả về một giá trị không phải Boolean.

Try it

const a = 3;
const b = -2;

console.log(a > 0 || b > 0);
// Expected output: true

Cú pháp

js
x || y

Mô tả

Nếu x có thể được chuyển đổi thành true, trả về x; nếu không, trả về y.

Nếu một giá trị có thể được chuyển đổi thành true, giá trị đó được gọi là truthy. Nếu một giá trị có thể được chuyển đổi thành false, giá trị đó được gọi là falsy.

Ví dụ về các biểu thức có thể được chuyển đổi thành false là:

  • null;
  • NaN;
  • 0;
  • chuỗi rỗng ("" hoặc '' hoặc ``);
  • undefined.

Mặc dù toán tử || có thể được sử dụng với các toán hạng không phải giá trị Boolean, nó vẫn có thể được coi là toán tử boolean vì giá trị trả về của nó luôn có thể được chuyển đổi thành boolean primitive. Để chuyển đổi tường minh giá trị trả về của nó (hoặc bất kỳ biểu thức nào nói chung) sang giá trị boolean tương ứng, hãy sử dụng toán tử NOT kép hoặc constructor Boolean().

Đánh giá short-circuit

Biểu thức logical OR được đánh giá từ trái sang phải, nó được kiểm tra khả năng đánh giá "short-circuit" bằng quy tắc sau:

(some truthy expression) || expr được đánh giá short-circuit thành biểu thức truthy.

Short circuit có nghĩa là phần expr ở trên không được đánh giá, do đó mọi tác dụng phụ của việc thực hiện như vậy đều không có hiệu lực (ví dụ: nếu expr là một lời gọi hàm, việc gọi không bao giờ xảy ra). Điều này xảy ra vì giá trị của toán tử đã được xác định sau khi đánh giá toán hạng đầu tiên. Xem ví dụ:

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)

Độ ưu tiên toán tử

Các biểu thức sau có thể trông tương đương, nhưng không phải vậy, vì toán tử && được thực thi trước toán tử || (xem độ ưu tiên toán tử).

js
true || false && false; // returns true, because && is executed first
(true || false) && false; // returns false, because grouping has the highest precedence

Ví dụ

Sử dụng OR

Đoạn code sau đây hiển thị các ví dụ về toán tử || (logical 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

Note: Nếu bạn sử dụng toán tử này để cung cấp giá trị mặc định cho một biến nào đó, hãy lưu ý rằng bất kỳ giá trị falsy nào sẽ không được sử dụng. Nếu bạn chỉ cần lọc ra null hoặc undefined, hãy xem xét sử dụng toán tử nullish coalescing.

Quy tắc chuyển đổi cho boolean

Chuyển đổi AND sang OR

Phép toán sau liên quan đến boolean:

js
bCondition1 && bCondition2

luôn bằng:

js
!(!bCondition1 || !bCondition2)

Chuyển đổi OR sang AND

Phép toán sau liên quan đến boolean:

js
bCondition1 || bCondition2

luôn bằng:

js
!(!bCondition1 && !bCondition2)

Loại bỏ dấu ngoặc lồng nhau

Vì các biểu thức logic được đánh giá từ trái sang phải, luôn có thể loại bỏ dấu ngoặc khỏi một biểu thức phức tạp theo một số quy tắc.

Phép toán tổng hợp sau liên quan đến boolean:

js
bCondition1 && (bCondition2 || bCondition3)

luôn bằng:

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

Thông số kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# prod-LogicalORExpression

Khả năng tương thích trình duyệt

Xem thêm