논리 연산자(Logical Operators)

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

논리 연산자(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 false로 변환할 수 있는 경우를 반환합니다. 그렇지 않으면 false를 반환합니다.
따라서 부울 값과 함께 사용할 경우 true를 반환하면 true를 반환하면 true를 반환하면 true를 반환합니다.
Logical OR (||) expr1 || expr2 || 을 true로 변환할 수 있으면이고, 그렇지 않으면입니다.
따라서 부울 값과 함께 사용될 때는 true를 반환하면 true를 반환하면 true를 반환하면 false로 변환할 수 있습니다.
Logical NOT (!) !expr 단일 피연산자가 True로 변환될 수 있는 경우 true를 반환합니다. 그렇지 않으면 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 2017 Draft (ECMA-262) Draft 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

문서 태그 및 공헌자

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