on
타입 변환과 단축 평가 (4): 단축 평가
타입 변환과 단축 평가 (4): 단축 평가
* 10.7 스터디 내용과 모던 자바스크립트 딥다이브를 참고하여 작성
1. 논리곱 연산자 / 논리합 연산자
논리 연산자 중에는 논리곱 연산자(&&)의 형태를 취하는 것들도 있다.
논리곱 연산자는 두 개의 피연산자가 모두 true로 평가될 때, true를 반환하는 연산자이다.
논리곱 연산자는 좌항에서 우항으로 평가를 진행하는데, 자세한 예시는 아래 코드를 참고하도록 하자.
'Apple' && 'Mango' // "Mango" false && 'Mango' // false
상기했던 것 처럼, 논리곱 연산자는 두 피연산자 모두 true로 평가되어야 true를 반환하는데,
따라서 'Apple'만으로는 결과를 반환할 수 없다. 뒤에 이어진 피연산자도 true여야 true가 반환되는 것이다.
위 예시에서 결국 return값을 결정짓는 것은 'Mango'이고, 따라서 문자열 "Mango"를 최종적으로 반환한다.
중요한 점은 불리언 형태가 아니라 return값을 결정하게 되는 피연산자를 타입 변환 없이 반환한다는 점이다.
두번째 코드를 보면 이해가 더 쉬울 수 있다. 애초에 첫번째 피연산자가 false이므로, 두번째 코드에서는 다음
피연산자가 무엇이 오든 항상 false를 반환할 수 밖에 없다.
'Dog' || 'Cat' // "Dog" 'Dog' || false // "Dog" false || 'Cat' // "Cat"
논리합(||) 연산자도 위의 예시를 통해 쉽게 이해할 수 있을 것이다. 둘 중 하나만 true면 된다.
논리합 연산자 역시 반환 값을 결정짓는 피연산자가 타입 변환 없이 반환 되는 형식이다.
(간단한 불 대수와 논리 회로 관련 내용을 접목시키면 쉽다. 논리곱은 말그래도 AND이며, 논리합은 OR이다)
2. 단축 평가
논리곱, 논리합 연산자는 위의 내용처럼, 논리 연산의 결과를 결정하는 피연산자를 타입 변환 없이 그대로 반환한다.
이를 단축 평가(short-circuit evaluation)라고 한다.
간략하게 표로 정리해보자면 다음과 같다.
단축 평가 표현식 결과 true && anything anything false && anything false true || anything true false || anything anything
3. 단축 평가의 활용
단축 평가는 if 문을 대체 가능하다. 다음의 예시를 살펴보자.
const loggedIn = true; let message = ''; // if문 if(loggedIn) message = '로그인' // 단축 평가 message = loggedIn && '로그인' console.log(message); // 로그인 // 논리합 연산자도 활용 가능 const complete = false let message = ''; if(complete) message = '미완료' // 혹은 message = complete || '미완료' console.log(message); // 미완료
또한, 객체를 가리킬 것으로 기대되는 변수가 null이나 undefined가 아닌지 확인할 수도 있다.
const component = null; const value =component.value; // 에러 발생 const component = null; const value = component && component.value; // null
마지막으로, 함수 매개변수에 기본값을 설정할 때에도 활용할 수 있다.
함수를 호출할 때 인수를 전달하지 않으면 매개변수에 자동으로 undefined가 할당되는데, 단축 평가를 활용하여
매개변수에 기본값을 설정하면 undefined로 발생하는 에러를 방지할 수 있다.
function getStringLength(str) { str = str || ''; return str.length; } getStringLength(); // 0 getStringLength('Hello') // 5
from http://oaat9309.tistory.com/16 by ccl(A) rewrite - 2021-10-17 21:02:05