JavaScript 10 — 논리 연산자

Apr 01 2023
부울 논리 부울 논리는 true 및 false 값을 처리하는 논리 시스템입니다. 프로그래밍에서 부울 논리는 결정을 내리고 프로그램 흐름을 제어하는 ​​데 광범위하게 사용됩니다.

부울 논리

부울 논리는 true 및 false 값을 처리하는 논리 시스템입니다. 프로그래밍에서 부울 논리는 결정을 내리고 프로그램 흐름을 제어하는 ​​데 광범위하게 사용됩니다.

부울 논리의 세 가지 주요 논리 연산자는 AND, OR 및 NOT입니다.

  • AND : AND 연산자는 두 피연산자가 모두 true인 경우에만 true를 반환합니다.
  • OR : OR 연산자는 피연산자 중 하나 또는 둘 다 참이면 참을 반환합니다.
  • NOT : NOT 연산자는 주어진 피연산자의 반대를 반환합니다.

코드의 논리 연산자

&&JavaScript에는 (AND), ||(OR) 및 !(NOT)의 세 가지 논리 연산자가 있습니다 . 이러한 연산자는 종종 JavaScript에서 부울 값을 결합하고 조작하는 데 사용됩니다.

&&(AND) 연산자

연산자 는 두 피연산자가 모두 이면 &&반환 하고 그렇지 않으면 반환합니다. 여기 몇 가지 예가 있어요.truetruefalse

// 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);       // ""

  • 연산자 &&는 첫 번째 피연산자가 참인 경우에만 두 번째 피연산자를 평가하기 때문에 단락 연산자로 알려져 있습니다. 이것은 코드를 최적화하고 오류를 피하는 데 유용할 수 있습니다.

연산자 는 피연산자 중 하나 이상이 이면 ||반환 하고 그렇지 않으면 반환합니다. 여기 몇 가지 예가 있어요.truetruefalse

// 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

  • 연산자 ||는 또한 첫 번째 피연산자가 false인 경우에만 두 번째 피연산자를 평가하는 단락 연산자입니다.
  • 연산자 ||는 에서와 같이 변수에 대한 기본값을 제공하는 데 자주 사용됩니다 const value = input || defaultValue;.

연산자 !는 부울 값을 부정하고 true피연산자가 이고 false피연산자 false가 이면 반환합니다 true. 여기 몇 가지 예가 있어요.

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

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

  • 연산자 !는 에서와 같이 두 번 부정하여 값을 부울 유형으로 변환하는 데 사용할 수 있습니다 !!value.

논리 연산자의 순서

논리 연산자의 순서는 여러 조건을 평가해야 하는 일부 경우에 차이를 만들 수 있습니다. 여기 몇 가지 예가 있어요.

연산자 우선 순위: 논리 AND( &&)는 논리 OR( )보다 우선 순위가 높습니다 ||. 이는 가 &&이전에 평가되고 ||조건의 결과를 변경할 수 있음을 의미합니다. 예를 들어:

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

두 번째 예에서는 가 (true || false)먼저 평가되어 결과가 입니다 true. 그런 다음 true && true평가되며 결과는 true. 전체 조건도 참이지만 괄호 때문에 다르게 평가됩니다.

단락 평가: 논리적 AND( &&) 및 논리적 OR( ||)은 단락 평가를 사용합니다. 즉, 두 번째 피연산자는 필요한 경우에만 평가됩니다. 예를 들어:

// 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
}

두 번째 예에서 if xis 에는 null속성 이 없기 x.property때문에 오류가 발생합니다 . null두 번째 피연산자는 첫 번째 피연산자보다 먼저 평가되므로 주의해서 사용하지 않으면 오류가 발생할 수 있습니다.

부정: 논리 NOT( !)은 조건을 부정하여 조건의 결과를 변경할 수 있습니다. 예를 들어:

let x = true;

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

초보자로서 논리 연산자의 순서에 주의를 기울이고 필요한 경우 괄호를 사용하여 순서를 명확히 하는 것이 중요합니다. 단락 평가와 오류를 방지하는 방법을 이해하는 것도 중요합니다. 부정은 조건을 읽고 이해하기 어렵게 만들 수 있으므로 주의해서 사용해야 합니다.

실제 사례

다음은 코드에서 사용되는 논리 연산자의 몇 가지 현실적인 예입니다. 예제를 읽고 논리를 이해할 수 있는지 확인하십시오. 아직 함수에 대해 논의하지 않았으므로 이해할 수 없다고 낙담하지 마십시오!

사용자 입력 확인:

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';
   }
}