JavaScript 강의를 듣다가 단축평가라는 개념이 나왔다.
단순히 아래의 4가지 규칙을 외우라고 설명해주었다.
- &&를 사용했을 때 좌측이 true면 우측값 반환
- &&를 사용했을 때 좌측이 false면 좌측값 반환
- ||를 사용했을 때 좌측이 true면 좌측값 반환
- ||를 사용했을 때 좌측이 false면 우측값 반환
뭔가 잘 외워지지가 않아서 뭔가 이해가 가능한 부분이 있는지 좀 더 찾아보았다.
정의
논리 연산자가 표현식을 평가하는 도중에 결과가 확정되면 나머지 부분은 평가하지 않고 즉시 결정을 내리는 것을 의미
쉽게 말해 논리 연산자가 더 이상 확인할 필요가 없을 때 멈추는 것
AND(&&) 연산자
AND 연산자는 두 피연산자가 모두 true여야 true를 반환한다. 첫 번째 피연산자가 false인 경우, 두 번째 피연산자를 평가할 필요가 없기 때문에 평가를 중단하는 원리로 좌측값을 반환하는 것이다.
let c = true && false; // false
let d = false && 'Hello'; // false
OR(||) 연산자
OR 연산자는 두 피연산자 중 하나라도 true이면 true를 반환한다. 첫 번째 피연산자가 true인 경우, 두 번째 피연산자를 평가할 필요가 없기 때문에 평가를 중단하는 원리로 우측값을 반환하는 것이다.
let a = true || false; // true
let b = false || 'Hello'; // Hello
위와 같은 원리로 인해 앞서 언급했던 4가지 규칙이 만들어진 것이었다.
궁금한 점
이 내용을 찾아보는 중에 두 가지 궁금증이 생겼다.
Q1. 지금까지는 true나 false 값이 논리 연산자 앞쪽에 무조건 나오는 예시만 보았는데
Hello라는 문자열이 앞쪽에 나오면 어떻게 되는 것인가?
Q2. 애초에 논리연산의 결과가 왜 Hello라는 문자열인가? 원래 true나 false만을 반환하는 것 아니었나?
다른 언어도 이랬던거였나?
위의 두 질문에 대해 검색을 해보던 도중 Q2에 대한 해답을 알고 Q1에 대한 궁금증도 풀렸다.
Q2
JavaScript, Python, Ruby, PHP 등은 논리 연산자가 피연산자 자체를 반환한다.
C 계열 언어(C, C++, Java, C#)에서는 논리 연산자가 항상 boolean 값을 반환한다.
JavaScript 언어에서는 피연산자 자체를 반환한다는 것을 알았다.
그렇다면 Hello라는 문자열은 논리 연산에서 참과 거짓 중 어떤 것에 해당하는지?
그것은 아래의 Falsy와 Truthy의 평가 기준을 보고 판단할 수 있다.
Falsy와 Truthy
JavaScript에서 다음 값들은 falsy로 평가된다.
- false
- 0
- -0
- 0n (BigInt)
- "" (빈 문자열)
- null
- undefined
- NaN
이 외의 모든 값은 truthy로 평가된다.
따라서 'Hello'라는 문자열은 truthy 값이다.
즉, Q1에서의 의문에 대한 코드는 다음과 같은 결과를 출력한다.
let a = 'Hello' || true; // Hello
'언어 > JavaScript' 카테고리의 다른 글
[JavaScript] 필수 배열 함수 (0) | 2024.07.08 |
---|---|
[JavaScript] Hoisting(호이스팅) (0) | 2024.07.06 |