쉽게 이야기하면 앞에만 보고도 판단할 수 있으면 굳이 뒤까지 보지 않겠다는 의미입니다.
이 개념은 JavaScript에만 존재하는 것은 아닙니다.
true || false // -> true
true || true // -> true
false || false // -> false
OR 연산은 둘 중 하나만 true가 되면 true 평가됩니다.
즉 앞에 내용이 true면 뒷 내용은 볼 필요도 없이 true로 단정지을 수 있습니다.
실제로 앞이 true면 뒷 내용은 보지도 않고 true로 결론 내립니다.
true && true // -> true
true && false // -> false
false && false // -> false
AND 연산은 둘 다 true가 되어야 true로 평가됩니다.
즉 앞에 내용이 false면 뒷 내용은 볼 필요도 없이 false로 단정지을 수 있습니다.
실제로 앞 내용이 false면 뒷 내용은 보지도 않고 false로 결론 내립니다.
논리곱(&&) 또는 논리합(||) 연산자 표현식의 평가 결과는 항상 boolean이 아닐 수 있습니다.
JavaScript는 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환합니다.
그래서 두 논리 연산자의 표현식은 언제나 2개의 피연산자 중 어느 한 쪽으로 평가됩니다.
let done = true;
let message = '';
if (done) message = '완료';
message = done && '완료';
console.log(message); // -> 완료
if문 을 살펴봅시다.
done이 true로 평가된다면 message에 '완료'를 할당합니다.
그 밑의 문장은 단축 평가를 사용한 예입니다.
done은 true입니다. AND 연산자는 둘 다 true여야 true로 평가되기 때문에 뒷 내용도 봐야합니다.
즉, 논리 연산의 결과를 결정하는 것은 뒷 내용(두 번째 피연산자)이 됩니다.
그래서 AND 연산자는 뒷 내용(두 번째 피연산자)을 그대로 반환합니다.
그래서 message에 '완료'가 할당되는 것입니다.
만약 여기서 done이 false였다면 message가 false였을 것입니다.
이미 done이 논리 연산의 결과를 결정지었기 때문입니다.
let done = false;
let message = '';
if (!done) message = '미완료';
message = done || '미완료';
console.log(message); // -> 완료
OR 연산자는 둘 중 하나만 true면 true로 평가되기 때문에 뒷 내용도 봐야합니다.
즉 논리 연산의 결과를 결정하는 것은 뒷 내용(두 번째 피연산자)이 됩니다.
그래서 OR 연산자는 뒷 내용을 그대로 반환하고, message에는 '미완료'가 할당되는 것입니다.
JavaScript에서 단축 평가는 단축 평가를 통해서 평가 결과가 확정된 경우 나머지 평가 과정을 생략하고
평가 결과를 결정지은 피연산자를 boolean 값으로 변환하지 않고 그대로 변환하는 것을 의미합니다.
'Cat' || 'Dog' // 'Cat'
false || 'Dog' // 'Dog'
'Cat' || false // 'Cat'
'Cat' && 'Dog' // 'Dog'
false && 'Dog' // false
'Cat' && false // false