📍
논리합 또는 논리곱 연산자 표현식의 평가 결과는
불리언 값이 아닐 수 있다. 또, 언제나 2개의 피연산자 중
어느 한쪽으로 평가된다.
1. 단축평가
논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하는 것을 '단축 평가'라 한다.
단축 평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.
대부분의 프로그래밍 언어는 단축 평가를 통해 논리 연산을 수행한다.
1.1 논리연산자를 사용한 단축 평가
'Cat' && 'Dog' // 'Dog'
- 논리곱(&&)은 두 개의 피연산자가 모두 true로 평가 될 때 true로 반환한다.
- 평가 진행 방향은 왼쪽에서 오른쪽으로 진행된다.
- 첫번째 피연산자가 true 여도 두번째 피연산자가 false이면 false값이 되기때문에 두번째 피연산자까지 봐야한다.
- 즉, 두번째 피연산자가 논리곱 연산자 표현식의 평가 결과를 결정한다. ✨
'Cat' || 'Dog' // 'Cat'
- 논리합(||)은 두 개의 피연산자 중 하나만 true로 평가 되어도 true를 반환한다.
- 평가 진행 방향은 왼쪽에서 오른쪽으로 진행된다.
- 첫번째 피연산자가 true가 되면 두번째 피연산자를 보지 않아도 true 값이 되기때문에 두번째 피연산자를 보지 않아도 된다.
- 첫번째 피연산자가 false 값인 경우 두번째 피연산자를 반환한다.
💡단축 평가는 어떤 상황에서 유용하게 사용될까?
1) 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때
var el = null;
var value = el.value; // TypeError
만약 객체를 가리키기를 기대하는 변수의 값이 객체가 아니라 null 또는 undefined인 경우 객체의 프로퍼티를 참조하면 타입에러가 발생한다. 에러가 발생하면 프로그램이 강제 종료된다.
✔️ 이때 단축 평가를 사용하면 에러가 나지 않는다.
var el = null;
var value = el && el.value; // null
첫번째 피연산자가 이미 Falsy 값인 null이기 때문에 첫번째 피연산자 값이 그대로 반환된다.
만약 첫번째 연산자가 Truthy 값이 였다면 두번째 연산자 값이 반환됐을것이다.
2) 함수 매개변수에 기본 값을 설정할 때
함수를 호출 할 때 인수를 전달하지 않으면 매개변수에는 undefined가 할당된다. 이때 단축평가를 사용해 매개변수의 기본값을 설정하면 undefined로 인해 발생할 수 있는 에러를 방지 할 수 있다.
function getStringLength(str) {
str = str || '';
return str.length;
}
getStringLength(); // 0
getStringLength('hi'); // 2
1.2 옵셔널 체이닝 연산자
- ES11 도입
- ?.
- 첫 번째 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 두 번째 프로퍼티 참조를 이어간다.
- 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때 유용하다.
- 또, 첫 번째 피연산자가 false로 평가되는 Falsy 값이라도 null 또는 undefined가 아니면 두 번째 프로퍼티 참조를 이어간다.
var el = null;
var value = el?.value;
console.log(value); // undefined
1.3 null 병합 연산자
- ES11 도입
- ??
- 첫 번째 피연산자가 null 또는 undefined인 경우 첫 번째 피연산자를 반환하고 그렇지 않으면 두 번째 피연산자를 반환한다.
- 변수에 기본값을 설정할 때 유용하다.
- 또, 첫 번째 피연산자가 false로 평가되는 Falsy 값이라도 null 또는 undefined가 아니면 두 번째 피연산자를 그대로 반환한다.
var foo = null ?? 'default string';
console.log(foo); // default string
📌 출처
모던 자바스크립트 Deep Dive(이웅모 저)