[JS] 단축 평가(Short-Circuit Evaluation) 쉽게 이해하기
논리곱(&&), 논리합(||) 연산자를 사용한 단축 평가(단락 평가) 대해 쉽게 이해해보자.
자바스크립트에서 && 또는 ||를 사용한 표현식은 그 피연산자 중 하나로 평가된다.
표현식(expression)이란 값으로 평가될 수 있는 코드이다.
대부분의 프로그래밍 언어에서, 논리곱(&&) 또는 논리합(||) 연산자를 이용한 표현식은 true 또는 false로 평가된다.
하지만, 자바스크립트에서는 표현식의 피연산자 중 하나로 평가된다.
일단 &&, || 연산자의 결합성은 좌결합성이므로 왼쪽에서 오른쪽으로 연산이 진행된다.
논리곱(&&) 연산자
피연산자를 왼쪽에서 오른쪽으로 확인하며 하나라도 falsy인 경우, 해당 falsy 값을 반환한다.
처음부터 끝까지 모든 피연산자가 truthy인 경우, 마지막 truthy 값을 반환한다.
논리합(||) 연산자
피연산자를 왼쪽에서 오른쪽으로 확인하며 하나라도 truthy인 경우, 해당 truthy 값을 반환한다.
처음부터 끝까지 모든 피연산자가 falsy인 경우, 마지막 falsy 값을 반환한다.
&&과 ||이 혼합되어 있는 경우
논리곱(&&) 연산자의 우선순위가 논리합(||) 연산자보다 높다.
따라서 &&, ||가 섞여있을 때는 논리곱(&&) 연산자의 연산이 먼저 이루어진 후, 논리합(||) 연산자의 연산이 이루어진다.
위 표현식은 왜 'def'로 평가될까? 연산 과정이 다음과 같이 이루어지기 때문이다.
'abc' && 'def' || 1 && true
('abc' && 'def') || (1 && true)
'def' || 1
'def'
자바스크립트의 falsy 값은 다음과 같다.
⚠️ 빈 객체와 배열은 truthy value임에 주의하자.
null
undefined
0
NaN
''
{} // 빈 객체는 truthy value이다.
[] // 빈 배열은 truthy value이다.
🤔💭 자바스크립트처럼 단축 평가가 일어나는 다른 프로그래밍 언어가 있는지 궁금하다.
References
모던 자바스크립트 Deep Dive (Chapter 9.4)
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Expressions_and_Operators
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
'프로그래밍 > JavaScript' 카테고리의 다른 글
[JS] 얕은 복사, 깊은 복사 차이 쉽게 이해하기 (3) | 2022.03.31 |
---|---|
[JS] 이벤트 위임을 활용한 Event Listener 중복 문제 해결 (0) | 2022.03.12 |
[자바스크립트] class vs object, 객체지향 언어 클래스 정리 (0) | 2021.03.22 |
[자바스크립트] Arrow function (0) | 2021.03.22 |
[자바스크립트] operator, if, for loop, 코드리뷰 팁 (0) | 2021.03.21 |