논리 AND 연산자

논리 AND 연산자 (&&)

논리 AND(&&)(논리곱) 연산자는 불리언 피연산자 집합에 대해 모든 피연산자가 true일 때만 true가 됩니다. 그 외에는 false입니다. 더 일반적으로, 이 연산자는 왼쪽에서 오른쪽으로 평가하면서 처음 만나는 거짓(falsy) 피연산자의 값을 반환하고, 모두 참(truthy)이면 마지막 피연산자의 값을 반환합니다.

호환성: Baseline — 널리 사용 가능(Widely available). 이 기능은 잘 확립되어 있으며 많은 기기와 브라우저 버전에서 작동합니다. 2015년 7월부터 브라우저에서 사용할 수 있습니다.

출처: Logical AND (&&)

본문

Try it

const a = 3;
const b = -2;

console.log(a > 0 && b > 0);
// Expected output: false

구문 (Syntax)

x && y

설명 (Description)

논리 AND(&&)는 피연산자를 왼쪽에서 오른쪽으로 평가하며, 처음 만나는 거짓(falsy) 피연산자의 값으로 즉시 반환합니다. 모든 값이 참(truthy)이면 마지막 피연산자의 값을 반환합니다.

값이 true로 변환될 수 있으면 그 값을 참(truthy)이라고 합니다. 값이 false로 변환될 수 있으면 그 값을 거짓(falsy)이라고 합니다.

false로 변환될 수 있는 표현식의 예는 다음과 같습니다.

  • false;
  • null;
  • NaN;
  • 0;
  • 빈 문자열("" 또는 '' 또는 ``)
  • undefined.

AND 연산자는 비-불리언 값을 보존해 그대로 반환합니다.

result = "" && "foo"; // result is assigned "" (empty string)
result = 2 && 0; // result is assigned 0
result = "foo" && 4; // result is assigned 4

&& 연산자는 비-불리언 피연산자와 함께 사용될 수 있지만, 반환값이 항상 불리언 원시 값으로 변환될 수 있으므로 여전히 불리언 연산자로 간주됩니다. 반환값(또는 일반적으로 어떤 표현식이든)을 해당 불리언 값으로 명시적으로 변환하려면 이중 NOT 연산자(!!)나 Boolean 생성자를 사용하세요.

단락 평가 (Short-circuit evaluation)

논리 AND 표현식은 단락(short-circuit) 연산자입니다. 각 피연산자가 불리언으로 변환될 때, 한 변환의 결과가 false로 발견되면 AND 연산자는 멈추고 그 거짓 피연산자의 원래 값을 반환합니다. 나머지 피연산자는 전혀 평가하지 않습니다.

다음 의사코드를 고려해 봅시다.

(some falsy expression) && expr

첫 번째 피연산자(어떤 거짓 표현식)가 거짓으로 평가되므로 expr 부분은 결코 평가되지 않습니다. expr이 함수라면 그 함수는 결코 호출되지 않습니다. 아래 예제를 보세요.

function A() {
  console.log("called A");
  return false;
}
function B() {
  console.log("called B");
  return true;
}

console.log(A() && B());
// Logs "called A" to the console due to the call for function A,
// && evaluates to false (function A returns false), then false is logged to the console;
// the AND operator short-circuits here and ignores function B

연산자 우선순위 (Operator precedence)

AND 연산자는 OR 연산자보다 높은 우선순위를 가집니다. 즉 && 연산자가 || 연산자보다 먼저 실행됩니다(연산자 우선순위 참고).

true || false && false; // true
true && (false || false); // false
(2 === 3) || (4 < 0) && (1 === 1); // false

예제 (Examples)

AND 사용 (Using AND)

다음 코드는 &&(논리 AND) 연산자의 예제를 보여줍니다.

a1 = true && true; // t && t returns true
a2 = true && false; // t && f returns false
a3 = false && true; // f && t returns false
a4 = false && 3 === 4; // f && f returns false
a5 = "Cat" && "Dog"; // t && t returns "Dog"
a6 = false && "Cat"; // f && t returns false
a7 = "Cat" && false; // t && f returns false
a8 = "" && false; // f && f returns ""
a9 = false && ""; // f && f returns false

불리언 변환 규칙 (Conversion rules for booleans)

  • AND를 OR로 변환: 불리언을 포함하는 다음 연산
    bCondition1 && bCondition2
    
    은 항상 다음과 같습니다.
    !(!bCondition1 || !bCondition2)
    
  • OR을 AND로 변환: 불리언을 포함하는 다음 연산
    bCondition1 || bCondition2
    
    은 항상 다음과 같습니다.
    !(!bCondition1 && !bCondition2)
    

중첩 괄호 제거 (Removing nested parentheses)

논리 표현식은 왼쪽에서 오른쪽으로 평가되므로, 특정 규칙을 따르기만 하면 복잡한 표현식에서 괄호를 항상 제거할 수 있습니다.

불리언을 포함하는 다음 복합 연산

bCondition1 || (bCondition2 && bCondition3)

은 항상 다음과 같습니다.

bCondition1 || bCondition2 && bCondition3

명세 (Specifications)

ECMAScript® 2027 언어 명세 — prod-LogicalANDExpression

더 알아보기