여러 곳에서 사용되었지만 정확하게는 설명하지 못했던 것 중 하나가 단축평가에 대한 부분이었다. 이 부분을 정리해보고자 한다.
논리곱(&&) 연산자와 논리합(||) 연산자는 피연산자를 타입을 Boolean 값으로 변환하지 않고 그대로 반환하는 것을 단축 평가라고 한다.
'apple' && 'orange' // 1 'orange'
'apple' && null // 2 null
'false && 'apple' // 3 false
&&의 결과가 결정 나는 때의 값을 반환하게 된다.
&& 연산자는 피연산자 둘 모두가 참인 경우를 제외하고는 모두 거짓이 된다. 처음에 참인 값이 나왔다면 아직 참 거짓 어느 것으로 평가가 확정이 된 상태가 아니기 때문에 두 번째 값으로 평가가 확정된다.
1번의 경우 apple는 참이기 때문에 평가가 확정되지 않고 orange로 인해 true로 평가가 끝나게 되고 이때 평가를 결정하게 된 orange를 반환하게 된다.
2번의 경우 apple는 참이기 때문에 평가가 확정되지 않고 null로 인해 false로 평가가 끝나게 되고 null로 인해 평가가 결정이 되었기 때문에 null을 반환하게 된다.
3번의 경우 false가 거짓으로 뒤에 어떤 값이 나와도 false로 평가가 된다. false로 인해 평가가 결정되었기 때문에 false를 반환하게 된다.
'apple' || 'orange' // 1 'apple'
0 || 'apple' // 2 'apple
0 || null // 3 'null'
||의 평가가 결정나는 때의 값을 반환하게 된다.
||의 연산자는 피연사자 둘 모두 거짓일 경우를 제외하고는 모두 참이된다. 처음에 거짓이 나왔다면 아직 거짓으로 평가가 확정된 상태가 아니기 때문에 두 번째 값으로 평가가 확정된다.
1번의 경우 apple는 참이기 때문에 뒤에 어떤 값이 나와도 true로 평가가 된다. apple로 인해 평가가 결정되었기 때문에 apple를 반환하게 된다.
2번의 경우 0은 거짓이기 때문에 아직 참인지 거짓인지 평가 할 수 없고 apple로 인해 true로 평가가 끝나게 된다. apple로 평가가 결정되었기 때문에 apple를 반환하게 된다.
3번의 경우 0은 거짓이기 때문에 아직 참인지 거짓인지 평가 할 수 없고 null로 인해 false로 평가가 끝나게 된다. null로 평가가 결정되었기 때문에 null를 반환하게 된다.
논리합, 논리곱 모두 평가를 결정하게 한 요소를 반환한다.
let curImage = null;
console.log(curImage && curImage.src); // null
function getStringLength(str) {
str = str || '';
return str.length;
}
getStringLength(); // 0
getStringLength('hi'); // 2