So sánh logic lệnh và hoặc

Toán tử logic

Show

    Giả sử bạn muốn kiểm tra đơn đặt hàng của khách hàng. Trước tiên, bạn muốn kiểm tra xem sản phẩm được đặt hàng có tồn tại hay không. Nếu có, bạn muốn kiểm tra số lượng của chúng đang hiện có đủ hay không. Các toán tử logic có ích trong những trường hợp như vậy. Nói cách khác, các toán tử logic được sử dụng để đánh giá nhiều hơn một điều kiện.

    STTToán tửMô tảVí dụĐầu ra1ANDAND: Được sử dụng để kết hợp nhiều hơn một điều kiện. Nếu tất cả các điều điều kiện đều đúng, AND đánh giá là true. Nếu bất kì điều kiện nào sai, AND đánh giá là falseIf true = true AND false = true THENfalse2OROR: Được sử dụng để kết hợp nhiều hơn một điều kiện. Nếu có bất kì điều kiện nào được đánh giá là đúng, OR trả về giá trị true. Nếu tất cả chúng đều sai, OR trả về giá trị falseIf true = true OR true = false THENtrue3NOTNOT: Hoạt động như một hàm nghịch đảo. Nếu điều kiện đúng, nó sẽ trả về giá trị false, và nếu điều kiện sai, thì nó sẽ trả về giá trị true.If NOT (true) Thenfalse

    Ví dụ minh họa

    Để đơn giản, chúng ta sẽ so sánh các số được mã hóa cứng.

    Thêm các nút ActiveX vào trang tính từ “Insert option.”

    Thiết lập các thuộc tính như hình dưới đây:

    So sánh logic lệnh và hoặc

    Bảng sau đây cho thấy các giá trị mà bạn cần thay đổi cũng như các giá trị mà bạn cần cập nhật:

    S/NControlPropertyValue1CommandButton1NamebtnAND CaptionAND Operator (0 = 0)2CommandButton2NamebtnOR CaptionOR Operator (1 = 1) Or (5 = 0)3CommandButton3NamebtnNOT CaptionNOT Operator Not (0 = )

    Thêm đoạn code sau vào btnAND_Click

    So sánh logic lệnh và hoặc

    Trong đó:

    • “If (1 = 1) And (0 = 0) Then“: câu lệnh If sử dụng toán tử logic AND để kết hợp hai điều kiện là (1 = 1) và (0 = 0). Nếu cả hai điều kiện đều đúng, đoạn code ở trên từ khóa “Else” sẽ được thực thi. Nếu cả hai điều kiện không đúng, đoạn code ở dưới từ khóa “Else” sẽ được thực thi.

    Thêm đoạn code sau vào btnOR_Click :

    So sánh logic lệnh và hoặc

    Trong đó:

    • “If (1 = 1) Or (5 = 0) Then“: câu lệnh If sử dụng toán tử logic OR để kết hợp hai điều kiện (1 = 1) và (5 = 0). Nếu có bất kì điều kiện nào đúng, đoạn code ở trên từ khóa “Else” sẽ được thực hiện. Nếu cả hai điều kiện đều sai, đoạn code nằm dưới từ khóa “Else” sẽ được thực thi.

    Thêm đoạn code sau vào btnNOT_Click:

    So sánh logic lệnh và hoặc

    Trong đó:

    • “If Not (0 = 0) Then“: Câu lệnh IF sử dụng toán tử logic NOT để phủ định kết quả của điều kiện. Nếu điều kiện là đúng, đoạn code ở dưới từ khóa “Else” sẽ được thực thi. Nếu điều kiện là sai, đoạn code ở trên từ khóa “Else” sẽ được thực thi.

    Cám ơn các bạn đã đọc bài. Nếu muốn học VBA nâng cao, hãy tham gia ngay các khóa học sau của Gitiho:

    So sánh logic lệnh và hoặc

    So sánh logic lệnh và hoặc

    Có rất nhiều ưu đãi đang dành cho bạn khi đăng ký khóa học này.

    JavaScript có bốn toán tử logic là: OR

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    3, AND

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    4, NOT

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    5 và "Nullish Coalescing"

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    6. Trong đó, ba toán tử OR, AND và NOT là ba toán tử logic cơ bản mà hầu như ngôn ngữ lập trình nào cũng có.

    Vì vậy, bài viết này sẽ tập trung vào tìm hiểu về ba toán tử OR, AND và NOT. Còn toán tử "Nullish Coalescing" sẽ được giới thiệu ở bài viết sau.

    Toán tử logic là toán tử kết nối hai hay nhiều biểu thức, dùng để kiểm tra mối quan hệ logic giữa các biểu thức. Kết quả cuối cùng phụ thuộc vào giá trị của từng biểu thức và loại toán tử logic.

    Theo định nghĩa thông thường, toán tử logic chỉ áp dụng cho kiểu dữ liệu boolean và kết quả trả về cũng là giá trị boolean.

    Nhưng với JavaScript thì khác, toán tử logic áp dụng cho bất kỳ kiểu dữ liệu nào và kết quả trả về cũng là bất kỳ kiểu dữ liệu nào. Để làm được điều này, các toán hạng tham gia đều được chuyển về kiểu dữ liệu boolean để kiểm tra tính logic.

    Trước khi tìm hiểu kỹ hơn về các toán tử logic, bạn cần biết hai khái niệm: truthy và falsy.

    Như bạn đã biết thì kiểu dữ liệu boolean chỉ có hai giá trị là:

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 và

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8. Vì vậy, khi một giá trị được chuyển về kiểu dữ liệu boolean, kết quả sẽ là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 hoặc

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8.

    Những giá trị mà khi chuyển về kiểu dữ liệu boolean ra giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 gọi là truthy.

    Tương tự, những giá trị mà khi chuyển về kiểu dữ liệu boolean ra giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8 gọi là falsy.

    Để chuyển một giá trị về kiểu dữ liệu boolean, bạn có thể dùng hàm

    console.log(true || true || true); // true console.log(true || false || true); // true console.log(false || true || false); // true console.log(false || false || false); // false

    3.

    Ví dụ các giá trị truthy:

    console.log(Boolean(true)); // true (giá trị true)
    console.log(Boolean(1)); // true (số nguyên dương)
    console.log(Boolean(-1)); // true (số nguyên âm)
    console.log(Boolean(100n)); // true (số BigInt khác 0)
    console.log(Boolean(1.5)); // true (số thực dương)
    console.log(Boolean(-1.5)); // true (số thực âm)
    console.log(Boolean("0")); // true (string khác rỗng)
    console.log(Boolean("abc")); // true (string khác rỗng)
    console.log(Boolean([])); // true (mảng - array)
    console.log(Boolean({ x: 1 })); // true (đối tượng - object)
    console.log(Boolean(Infinity)); // true (số dương vô cùng)
    console.log(Boolean(-Infinity)); // true (số âm vô cùng)
    console.log(Boolean(alert)); // true (hàm)

    Ví dụ về các giá trị falsy:

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    Sau đây là những kiến thức cơ bản cần biết về toán tử logic OR (

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    3), AND (

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    1. và NOT (

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    1. trong JavaScript.

    Toán tử OR trong JavaScript kí hiệu là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    3 (tạm dịch là toán tử "hoặc").

    Trong lập trình nói chung, toán tử OR trả về giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 nếu có ít nhất một toán hạng là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7, ngược lại sẽ trả về

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8.

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    Ngoài ra, bạn cũng có thể kết hợp nhiều toán tử OR:

    console.log(true || true || true); // true
    console.log(true || false || true); // true
    console.log(false || true || false); // true
    console.log(false || false || false); // false

    Đó là với logic thông thông thường, còn JavaScript thì phức tạp hơn một chút.

    Toán tử OR trong JavaScript sẽ tìm và trả về giá trị truthy đầu tiên. Nếu không có giá trị truthy nào thì kết quả sẽ là giá trị của toán hạng cuối cùng.

    Quá trình xử lý như sau:

    • Thứ tự thực hiện từ trái sang phải.
    • Lần lượt chuyển mỗi toán hạng về kiểu boolean.
      • Nếu kết quả là

        console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false

        7 thì trả về giá trị gốc của toán hạng đó và dừng lại.
      • Nếu kết quả là

        console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false

        8 thì tiếp tục thực hiện với toán hạng tiếp theo.
    • Nếu không có giá trị truthy nào thì kết quả trả về là giá trị của toán hạng cuối cùng.

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    Toán tử OR được dùng nhiều với câu lệnh

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5

    Nếu bạn chưa biết câu lệnh

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5 là gì, thì đơn giản câu lệnh

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5 dùng để kiểm tra điều kiện, nếu đúng sẽ thực hiện một hành động (mình sẽ có bài viết chi tiết về

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5 sau).

    if (/* true */) {
          // làm gì đó ở đây
        }
    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    Ví dụ kết hợp với toán tử so sánh

    const hour = 20;
    if (hour < 9 || hour > 17) {
      console.log("Ngoài giờ làm việc"); // câu lệnh này được thực hiện
    }

    ::alert{type="infor"}toán tử so sánh có độ ưu tiên cao hơn toán tử logic, nên toán tử so sánh được thực hiện trước toán tử OR.::

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    9 bằng

    if (/* true */) {
          // làm gì đó ở đây
        }

    0 nên

    if (/* true */) {
          // làm gì đó ở đây
        }

    1 là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8 và

    if (/* true */) {
          // làm gì đó ở đây
        }

    3 là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7. Nghĩa là

    if (/* true */) {
          // làm gì đó ở đây
        }

    5 có thể quy đổi thành

    if (/* true */) {
          // làm gì đó ở đây
        }

    6. Suy ra, kết quả cuối cùng là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7.

    Do đó, câu lệnh

    if (/* true */) {
          // làm gì đó ở đây
        }

    8 được thực hiện.

    Toán tử OR được dùng để lấy ra giá trị truthy đầu tiên trong các giá trị

    Ví dụ bài toán hiển thị tên người dùng trên trang web, biết thông tin người dùng có hai trường liên quan đến tên là

    if (/* true */) {
          // làm gì đó ở đây
        }

    9 và

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    0.

    Ưu tiên hiển thị tên

    if (/* true */) {
          // làm gì đó ở đây
        }

    9 trước. Nếu

    if (/* true */) {
          // làm gì đó ở đây
        }

    9 rỗng thì hiển thị

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    0. Nếu

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    0 cũng rỗng thì hiển thị "Người dùng ẩn danh".

    Với bài toán này, bạn có thể sử dụng toán tử OR như sau:

    const fullName = "";
    const nickName = "jsDev";
    const displayName = fullName || nickName || "Người dùng ẩn danh";
    console.log(displayName); // jsDev

    Toán tử OR có thể dùng cho "short-circuit evaluation"

    Đặc điểm của toán tử OR trong JavaScript là sẽ xử lý các toán hạng cho đến khi tìm được giá trị truthy mới thôi.

    Nhưng bạn cần chú ý, toán hạng ở đây không chỉ là giá trị, mà còn có thể là một biểu thức gán, hàm hoặc một câu lệnh,...

    Ví dụ:

    true || console.log("Câu lệnh này không được thực hiện"); // (1)
    false || console.log("Câu lệnh này được thực hiện"); // (2)

    Câu lệnh

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    5 (1) không được thực hiện. Vì toán tử OR gặp giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 đầu tiên, sẽ dừng lại và trả về giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 luôn, không xử lý gì toán hạng tiếp theo.

    Câu lệnh

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    5 (2) được thực hiện. Vì toán tử OR gặp giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8 đầu tiên. Đây là giá trị falsy nên toán tử OR tiếp tục xử lý toán hạng thứ hai.

    Vì vậy, câu lệnh

    const hour = 20;
    if (hour < 9 || hour > 17) {
      console.log("Ngoài giờ làm việc"); // câu lệnh này được thực hiện
    }

    0 được thực hiện.

    💡 Tổng quát, tính năng này được dùng để thực hiện một hành động nếu điều kiện bên trái là falsy.

    Tuy nhiên để dễ theo dõi code hơn, mình khuyên bạn nên sử dụng

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5 thay vì dùng toán tử OR làm "short-circuit evaluation".

    Toán tử AND trong JavaScript kí hiệu là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    4 (tạm dịch là toán tử "và").

    Trong lập trình nói chung, toán tử AND trả về giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 nếu cả hai toán hạng là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7, ngược lại sẽ trả về

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8.

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    0

    Ngoài ra, bạn cũng có thể kết hợp nhiều toán tử AND:

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    1

    Toán tử AND trong JavaScript sẽ tìm và trả về giá trị falsy đầu tiên. Nếu không có giá trị falsy nào thì kết quả sẽ là giá trị của toán hạng cuối cùng.

    Quá trình xử lý như sau:

    • Thứ tự thực hiện từ trái sang phải.
    • Lần lượt chuyển mỗi toán hạng về kiểu boolean.
      • Nếu kết quả là

        console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false

        8 thì trả về giá trị gốc của toán hạng đó và dừng lại.
      • Nếu kết quả là

        console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false

        7 thì tiếp tục thực hiện với toán hạng tiếp theo.
    • Nếu không có giá trị falsy nào thì kết quả trả về là giá trị của toán hạng cuối cùng.

    Ví dụ:

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    2

    Toán tử AND được dùng nhiều với câu lệnh

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5

    Tương tự như toán tử OR ở trên, toán tử AND cũng hay dùng với câu lệnh

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    3

    Ví dụ kết hợp toán tử so sánh

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    4

    ::alert{type="infor"}toán tử so sánh có độ ưu tiên cao hơn toán tử logic, nên toán tử so sánh được thực hiện trước toán tử AND.::

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    9 bằng

    const fullName = "";
    const nickName = "jsDev";
    const displayName = fullName || nickName || "Người dùng ẩn danh";
    console.log(displayName); // jsDev

    3 nên

    const fullName = "";
    const nickName = "jsDev";
    const displayName = fullName || nickName || "Người dùng ẩn danh";
    console.log(displayName); // jsDev

    4 là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 và

    const fullName = "";
    const nickName = "jsDev";
    const displayName = fullName || nickName || "Người dùng ẩn danh";
    console.log(displayName); // jsDev

    6 là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7. Nghĩa là

    const fullName = "";
    const nickName = "jsDev";
    const displayName = fullName || nickName || "Người dùng ẩn danh";
    console.log(displayName); // jsDev

    8 có thể quy đổi thành

    const fullName = "";
    const nickName = "jsDev";
    const displayName = fullName || nickName || "Người dùng ẩn danh";
    console.log(displayName); // jsDev

    9. Suy ra, kết quả cuối cùng là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7.

    Do đó, câu lệnh

    true || console.log("Câu lệnh này không được thực hiện"); // (1)
    false || console.log("Câu lệnh này được thực hiện"); // (2)

    1 được thực hiện.

    Toán tử AND có thể dùng cho "short-circuit evaluation"

    Tương tự như toán tử OR, toán tử AND cũng có thể dùng cho "short-circuit evaluation".

    Vì đặc điểm của toán tử AND trong JavaScript là sẽ xử lý các toán hạng cho đến khi tìm được giá trị falsy mới thôi.

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    5

    Câu lệnh

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    5 (1) được thực hiện. Vì toán tử AND gặp giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 đầu tiên. Đây là giá trị truthy nên toán tử AND tiếp tục xử lý toán hạng thứ hai. Vì vậy, câu lệnh

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    5 (1) được thực hiện.

    Câu lệnh

    const a = 1;
    const b = 0;
    if (a || b) {
      console.log("truthy!"); // câu lệnh này được thực hiện vì 1 || 0 trả về 1 - là truthy.
    }

    5 (2) không được thực hiện. Vì toán tử AND gặp giá trị falsy đầu tiên. Nên dừng lại luôn và không xử lý toán tử thứ hai.

    💡 Tổng quát, tính năng này được dùng để thực hiện một hành động nếu điều kiện bên trái là truthy.

    Để dễ theo dõi code hơn thì mình khuyên bạn nên sử dụng

    console.log(1 || 0); // 1 (giá trị truthy đầu tiên là 1)
    console.log(null || 2); // 2 (giá trị truthy đầu tiên là 2)
    console.log("" || undefined || 0 || 10); // 10 (giá trị truthy đầu tiên là 10)
    console.log(null || 100 || 5 || undefined); // 100 (giá trị truthy đầu tiên là 100)
    console.log("" || 0 || null); // null (không có giá trị truthy, trả về giá trị cuối cùng)

    5 thay vì dùng toán tử AND làm "short-circuit evaluation".

    Toán tử NOT trong JavaScript kí hiệu là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    5 (tạm dịch là toán tử "phủ định").

    Trong lập trình nói chung, toán tử NOT trả về giá trị

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7 nếu toán hạng là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8 và trả về

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    8 nếu toán hạng là

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    7.

    Vì là toán tử một ngôi, nên toán tử NOT chỉ chứa một toán hạng, ví dụ:

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    6

    Quá trình xử lý của toán tử NOT như sau:

    • Chuyển giá trị của toán hạng về dạng boolean:

      console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false

      7 hoặc

      console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false

      8.
    • Rồi trả về giá trị ngược lại.

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    7

    Nếu bạn sử dụng hai toán tử NOT

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    05 thì nó sẽ có tác dụng chuyển đổi kiểu dữ liệu về giá trị boolean, giống hàm

    console.log(true || true || true); // true
    console.log(true || false || true); // true
    console.log(false || true || false); // true
    console.log(false || false || false); // false

    3 mà mình đã nhắc ở đầu.

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    8

    Bởi vì toán tử NOT đầu tiên

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    5 đã chuyển giá trị về boolean rồi trả về giá trị ngược lại. Toán tử NOT thứ hai

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    5 lại trả về giá trị ngược lại một lần nữa. Kết hợp lại thì sẽ tương đương với chuyển giá trị ban đầu về boolean.

    Hay nói gắn gọn lại là: "phủ định của phủ định thành khẳng định".

    Nếu so sánh với các toán tử đã học như toán tử số học và toán tử so sánh thì toán tử logic trong JavaScript có độ ưu tiên thấp hơn.

    Nếu so sánh thứ tự ưu tiên của các toán tử logic trong JavaScript với nhau thì toán tử NOT (

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    1. có độ ưu tiên cao nhất. Xếp thứ hai là toán tử AND (

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    4). Và cuối cùng là toán tử OR (

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    3).

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    9

    Dựa theo độ ưu tiên thì quá trình thực hiện sẽ như sau (mình sử dụng cặp dấu ngoặc đơn

    console.log(Boolean(false)); // false
    console.log(Boolean(0)); // false
    console.log(Boolean("")); // false (string rỗng)
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false
    console.log(Boolean(NaN)); // false

    12 để biểu thị phần được xử lý trước):