JavaScript 10 — Toán tử logic

Apr 01 2023
Logic Boolean Logic Boolean là một hệ thống logic xử lý các giá trị đúng và sai. Trong lập trình, logic boolean được sử dụng rộng rãi để đưa ra quyết định và kiểm soát luồng chương trình.

logic Boolean

Logic Boolean là một hệ thống logic xử lý các giá trị đúng và sai. Trong lập trình, logic boolean được sử dụng rộng rãi để đưa ra quyết định và kiểm soát luồng chương trình.

Ba toán tử logic chính trong logic boolean là AND, OR và NOT.

  • AND : Toán tử AND chỉ trả về giá trị true nếu cả hai toán hạng đều đúng.
  • OR : Toán tử OR trả về giá trị true nếu một trong hai hoặc cả hai toán hạng đều đúng.
  • NOT : Toán tử NOT trả về giá trị ngược lại của một toán hạng đã cho.

Toán tử logic trong mã

JavaScript có ba toán tử logic: &&(AND), ||(OR) và !(NOT). Các toán tử này thường được sử dụng để kết hợp và thao tác các giá trị boolean trong JavaScript.

toán tử && (VÀ)

Toán &&tử trả về truenếu cả hai toán hạng là true, falsengược lại. Dưới đây là một số ví dụ:

// Normal examples
console.log(true && true);   // true
console.log(true && false);  // false
console.log(false && true);  // false
console.log(false && false); // false

// Type coercion examples
console.log("hello" && 42);   // 42
console.log("" && 42);       // ""

  • Toán &&tử được gọi là toán tử ngắn mạch vì nó chỉ đánh giá toán hạng thứ hai nếu toán hạng thứ nhất là đúng. Điều này có thể hữu ích để tối ưu hóa mã và tránh lỗi.

Toán ||tử trả về truenếu ít nhất một trong các toán hạng là true, và falsengược lại. Dưới đây là một số ví dụ:

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

// Type coercion examples
console.log("" || "hello");  // "hello"
console.log(0 || 42);        // 42

  • Toán ||tử cũng là toán tử ngắn mạch, chỉ đánh giá toán hạng thứ hai nếu toán hạng thứ nhất sai.
  • Toán ||tử thường được sử dụng để cung cấp các giá trị mặc định cho các biến, như trong const value = input || defaultValue;.

Toán !tử phủ định một giá trị boolean, trả về truenếu toán hạng là false, và falsenếu toán hạng là true. Dưới đây là một số ví dụ:

// Normal examples
console.log(!true);  // false
console.log(!false); // true

// Type coercion examples
console.log(!"hello");   // false
console.log(!undefined); // true

  • Toán !tử có thể được sử dụng để chuyển đổi một giá trị thành kiểu boolean bằng cách phủ định giá trị đó hai lần, như trong !!value.

Thứ tự các toán tử logic

Thứ tự của các toán tử logic có thể tạo ra sự khác biệt trong một số trường hợp cần đánh giá nhiều điều kiện. Dưới đây là một số ví dụ:

Độ ưu tiên của toán tử: Logic AND ( &&) có độ ưu tiên cao hơn Logic OR ( ||). Điều này có nghĩa là điều đó &&được đánh giá trước ||và có thể thay đổi kết quả của một điều kiện. Ví dụ:

// This condition will evaluate to true
if (true || false && true) {
  // do something
}
// This condition will evaluate to false
if ((true || false) && true) {
  // do something
}

Trong ví dụ thứ hai, (true || false)được đánh giá đầu tiên, kết quả là true. Sau đó, true && trueđược đánh giá, kết quả là true. Toàn bộ điều kiện cũng đúng, nhưng nó được đánh giá khác do dấu ngoặc đơn.

Đánh giá ngắn mạch: Logic AND ( &&) và Logic OR ( ||) sử dụng đánh giá ngắn mạch, nghĩa là toán hạng thứ hai chỉ được đánh giá nếu cần. Ví dụ:

// This condition will evaluate to true without an error
if (x !== null && x.property === "value") {
  // do something
}
// This condition will throw an error
if (x.property === "value" && x !== null) {
  // do something
}

Trong ví dụ thứ hai, nếu xnull, x.propertysẽ báo lỗi vì nullkhông có bất kỳ thuộc tính nào. Toán hạng thứ hai được đánh giá trước toán hạng thứ nhất, điều này có thể dẫn đến lỗi nếu không được sử dụng cẩn thận.

Phủ định: Logic NOT ( !) có thể thay đổi kết quả của một điều kiện bằng cách phủ định nó. Ví dụ:

let x = true;

// This condition will evaluate to false
if (!x) {
  // do something
}
// This condition will evaluate to true
if (!!x) {
  // do something
}

Là người mới bắt đầu, điều quan trọng là phải chú ý đến thứ tự của các toán tử logic và sử dụng dấu ngoặc đơn để làm rõ thứ tự nếu cần. Việc hiểu đánh giá ngắn mạch và cách nó có thể ngăn ngừa lỗi cũng rất quan trọng. Phủ định nên được sử dụng một cách thận trọng vì nó có thể làm cho điều kiện khó đọc và khó hiểu hơn.

Ví dụ trong thế giới thực

Dưới đây là một số ví dụ thực tế về Toán tử logic được sử dụng trong mã. Đọc qua các ví dụ và xem liệu bạn có thể hiểu logic không, nhưng đừng nản lòng nếu bạn không thể vì chúng ta chưa thảo luận về hàm!

Xác thực đầu vào của người dùng:

function validateInput(input) {
  const isString = typeof input === 'string';
  const isNotEmpty = input !== '';
  const isLessThanTenChars = input.length < 10;
  return isString && isNotEmpty && isLessThanTenChars;
}

function filterProducts(products, minPrice, maxPrice, availableOnly) {
  return products.filter(product => {
    const isWithinPriceRange = product.price >= minPrice && product.price <= maxPrice;
    const isAvailable = availableOnly ? product.stock > 0 : true;
    return isWithinPriceRange && isAvailable;
  });
}

function isEligibleForDiscount(user) {
  const hasPaid = user.orders.some(order => order.status === 'paid');
  const hasFrequentOrders = user.orders.length >= 5;
  const hasValidCoupon = user.coupons.includes('DISCOUNT2022');
  return (hasPaid || hasFrequentOrders) && hasValidCoupon;
}

function isProductOnSale(product) {
  const isDiscounted = product.discount > 0;
  const hasLowStock = product.stock <= 10;
  return isDiscounted || hasLowStock;
}

function getTaskStatus(priority, isComplete) {
  const isUrgent = priority === 'high' || priority === 'urgent';
  const isOverdue = priority === 'low' && !isComplete;
  const isInProgress = priority === 'medium' && !isComplete;
   if (isUrgent) {
      return 'Urgent';
    } else if (isOverdue) {
      return 'Overdue';
    } else if (isInProgress) {
      return 'In Progress';
    } else {
      return 'Pending';
   }
}