번역 작업 진행중입니다.

논리 연산자(Logical operators)는  보통 Boolean 논리적(logical) 값(value)과 함께 쓰입니다. Logical operator와 Boolean value를 함께 사용하면, Boolean value를 반환(return)합니다. 그러나,  &&|| 연산자(operator)는 피연산자(operand)중 특정한 operand하나를 return합니다. 즉, Boolean이 아닌 value와 logical operator를 함께 사용하면 Boolean 이 아닌 value를 return할수 있습니다.

Description

The logical operators are described in the following table:

Operator Usage Description
Logical AND (&&) expr1 && expr2 expr1을 false로 변환할 수 있는 경우 expr1을 반환하고, 그렇지 않으면 expr2를 반환합니다.
따라서 부울 값과 함께 사용할 경우, expr1과 expr2가 모두 true인 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.
Logical OR (||) expr1 || expr2

expr1true로 변환할 수 있으면 expr1을 반환하고, 그렇지 않으면 expr2를 반환합니다.
따라서 부울 값과 함께 사용할 경우, expr1, expr2 둘 중 하나가 true인 경우 true를 반환합니다.

Logical NOT (!) !expr 단일 피연산자가 true로 변환될 수 있는 경우 false를 반환합니다. 그렇지 않으면 true를 반환합니다.

값을 true로 변환하면 값이 truthy. 인 것입니다. 값을 false로 변환할 수 있으면 값이 falsy.인 것입니다.

거짓으로 변환할 수 있는 표현의 예는 다음과 같습니다.

  • null;
  • NaN;
  • 0;
  • empty string (""); 
  • undefined.

&& 연산자와 || 연산자는 부울 값이 아닌 피연산자와 함께 사용될 수 있다, 그들은 커널 값이 항상 Boolean값으로 변환될 수 있으므로 커널 연산자로 간주될 수 있다.

Short-Circuit 평가

논리적인 표현이 좌측으로 평가되므로 다음 규칙을 사용하여"단락"평가를 수행할 수 있습니다.

  • false && (anything) false 단락으로 평가된다. 
  • true || (anything) true 단락으로 평가된다.

이러한 평가들은 이러한 평가들이 항상 옳다는 것을 보장한다.
상기 표현의 어떤 부분이라도 평가되지 않으므로 부작용이 발생하지 않도록 주의하십시오.
또한 위의 어떠한 것이든 위의 모든 것이 하나의 논리적 표현(괄호 안에 표시된 것처럼)임을 유의하십시오.

예를 들어, 다음과 같은 두가지 기능이 있다.

function shortCircuitEvaluation() {
  doSomething() || doSomethingElse()
}

function equivalentEvaluation() {
  var flag = doSomething();
  if (!flag) {
    doSomethingElse();
  }
}

그러나, 다음 두 식은 연산자 우선 순위 때문에 동일하지 않다는 것을 의미하며, 오른쪽 피연산자가 단일식으로 필요한 경우 (괄호로 묶어 그룹화)의 중요성을 강조합니다.

false && true  || true      // returns true
false && (true || true)     // returns false

Logical 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

Logical OR (||)

다음 코드 예제에서는 ||(논리 OR)연산자의 예를 보여 줍니다.

o1 = true  || true       // t || t returns true
o2 = false || true       // f || t returns true
o3 = true  || false      // t || f returns true
o4 = false || (3 == 4)   // f || f returns false
o5 = "Cat" || "Dog"      // t || t returns "Cat"
o6 = false || "Cat"      // f || t returns "Cat"
o7 = "Cat" || false      // t || f returns "Cat"

Logical NOT (!)

다음 코드 예제에서는 의 예를 보여 줍니다. (논리적이지 않음)연산자

n1 = !true              // !t returns false
n2 = !false             // !f returns true
n3 = !"Cat"             // !t returns false

Conversion rules

Converting AND to OR

다음과 같은 작업을 수반하는 다음 작업을 수행합니다.

bCondition1 && bCondition2

은 항상 다음과 같습니다.

!(!bCondition1 || !bCondition2)

Converting OR to AND

다음과 같은 작업을 수반하는 다음 작업을 수행합니다.

bCondition1 || bCondition2

은 항상 다음과 같습니다.

!(!bCondition1 && !bCondition2)

Converting between NOTs

다음과 같은 작업을 수반하는 다음 작업을 수행합니다.

!!bCondition

is always equal to:

bCondition

중첩된 괄호 제거

논리적인 표현들이 왼쪽으로 평가되듯이, 어떤 규칙에 따라 복잡한 표현에서 괄호를 떼어 내는 것은 항상 가능하다.

중첩 제거 및 제거

다음과 같은 합성 작업을 포함한 다음과 같은 합성 작업을 수행합니다.

bCondition1 || (bCondition2 && bCondition3)

은 항상 다음과 같습니다.

bCondition1 || bCondition2 && bCondition3

Removing nested OR

다음과 같은 합성 작업을 포함한 다음과 같은 합성 작업을 수행합니다.

bCondition1 && (bCondition2 || bCondition3)

은 항상 다음과 같습니다.

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

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition.
ECMAScript 5.1 (ECMA-262) Standard Defined in several sections of the specification: Logical NOT Operator, Binary Logical Operators
ECMAScript 2015 (6th Edition, ECMA-262) Standard Defined in several sections of the specification: Logical NOT Operator, Binary Logical Operators
ECMAScript Latest Draft (ECMA-262) Living Standard Defined in several sections of the specification: Logical NOT Operator, Binary Logical Operators

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Logical AND (&&) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical OR (||) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical NOT (!) (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Logical AND (&&) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical OR (||) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)
Logical NOT (!) (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

See also

문서 태그 및 공헌자

 이 페이지의 공헌자: gnujoow, helloheesu, imskojs
 최종 변경: gnujoow,