자바스크립트에서 논리합(||
) 또는 논리곱(&&
) 연산자 표현식의 평가 결과는 불리언 값이 아닐 수 있다.
논리합(||
) 또는 논리곱(&&
) 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다는 것이다.
'Cat' && 'Dog' // -> Dog
논리곱(&&
) 연산자는 두 개의 피연산자가 모두 true로 평가될 때 true를 반환한다.
논리곱 연산자는 좌항에서 우항으로 평가가 진행된다.
첫 번째 피연산자 'Cat'은 Truthy
값이므로 true로 평가된다. 하지만 논리곱 연산자이기 때문에 이 시점에서는 위 표현식을 평가할 수 없다. 두 번째 피연산자까지 평가해 보아야 위 표현식을 평가할 수 있다. 즉, 두 번째 피연산자가 위 논리곱 연산자 표현식의 평가 결과를 결정한다.
"Dog" 역시 Truthy
값 이므로, 두번째 피연산자 "Dog"를 그대로 반환하게 된다.
'Cat' || 'Dog' // -> Cat
논리합(||) 연산자는 두 개의 피연산자 중 하나만 true로 평가되어도 true를 반환한다.
논리합 연산자도 좌항에서 우항으로 평가가 진행된다.
첫 번째 연산자 'Cat'은 Truthy
값이므로 true로 평가된다. 논리합 연산자는 두번째 연산자를 평가해 보지 않아도 이 시점에서 표현식을 평가할 수 있다.
따라서 이 때 논리합 연산자는 논리 연산의 결과를 결정한 첫 번째 피연산자, 즉 문자열 "Cat"을 그대로 반환한다.
논리곱(&&) 연산자와 논리합(||) 연산자는 이처럼 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환한다.
이를 단축평가 (short-circuit evaluation) 라 한다.
단축평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.
논리곱
var done = true;
var message = '';
message = done && '완료';
console.log(message); // 완료
논리합
var done = false;
var message = '';
message = done || '미완료';
console.log(message); // 미완료
모던 자바스크립트, 이웅모 저