논리 연산자
논리 연산자는 보통 불리언(논리) 값과 함께 사용해서 불리언 값을 반환한다.
그러나 &&와 || 연산자는 사실 두 피연산자 중 하나를 반환하는 것으로, 만약 둘 중 하나가 불리언 값이 아니라면 논리 연산자의 반환 값도 불리언 값이 아닐 수 있다.
연산자 | 사용법 | 설명 |
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
'Study > JavaScript' 카테고리의 다른 글
[JavaScript] Array.fill 과 Array.from 차이? (0) | 2022.08.30 |
---|---|
[JavaScript] 정규 표현식, 정규식 (0) | 2022.06.16 |
[JavaScript] 중급 #18 - Generator (0) | 2021.10.19 |
[JavaScript] 중급 #17 - async, await (0) | 2021.10.19 |
[JavaScript] 문자열을 배열로, 배열을 문자열로 (0) | 2021.10.08 |