논리 연산자

논리 연산자는 보통 불리언(논리) 값과 함께 사용해서 불리언 값을 반환한다.

그러나 && || 연산자는 사실 두 피연산자 중 하나를 반환하는 것으로, 만약 둘 중 하나가 불리언 값이 아니라면 논리 연산자의 반환 값도 불리언 값이 아닐 수 있다.

 

연산자 사용법 설명
AND (&&) expr1 && expr2 expr1을 false로 변환할 수 있으면 expr1을 반환하고 그 외의 경우에는 expr2를 반환한다.
따라서 불리언 값과 함께 사용한 경우, 둘 다 참일 때 true를, 그 외에는 false를 반환한다.
OR (||) expr1 || expr2 expr1을 true로 변환할 수 있으면 expr1을 반환하고 그 외의 경우에는 expr2를 반환한다.
따라서 불리언 값과 함께 사용한 경우, 둘 중 하나가 참일 때 true를, 그 외에는 false를 반환한다.
NOT (!) !expr 단일 피연산자를 true로 변환할 수 있으면 false를 반환하고 그 외에는 true를 반환한다.

 

 

false로 변환할 수 있는 표현식

※ 평가 결과가 null, 0, NaN, 빈 문자열(""), undefined인 경우입니다.

 

 

 

AND (&&) 연산자의 예제

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

 

 

OR (||) 연산자의 예제

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

 

 

NOT (!) 연산자의 예제

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

 

 

 

단락 평가

논리 연산자는 왼쪽에서 오른쪽의 순서로 평가하므로, 다음 규칙을 사용해서 "단락"(short-circuit) 평가가 가능한지 판별한다.

  • false && 아무거나는 거짓으로 단락 평가
  • true || 아무거나는 참으로 단락 평가

논리 규칙은 위의 단락 평가가 항상 옳음을 보증한다. 

아무거나 부분의 표현식은 평가도 하지 않으므로, 해당 표현식에서 유발하게 되는 부수 효과도 전혀 발생하지 않음에 주의해야 한다. 

 

참고로 ||을 사용한 두 번째 단락 평가의 경우, 최근 코드에서는 새로운 널 병합 연산자 (??)를 사용할 수도 있다.

널 병합 연산자는 첫 번째 연산자가 "널과 유사"한, 즉 null이거나 undefined일 때만 두 번째 피연산자를 반환한다. 

'' 0도 유효한 값이라면 널 병합 연산자가 기본 값을 나타낼 때 더 좋은 선택지다.

 

 

 

 

 

↓ 참고 사이트

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Expressions_and_Operators

 

 

+ Recent posts