'cat' && 'dog' // dog
&&
연산자는 둘 다 참일 때 true를 반환한다. 그래서 앞에 cat은 Truthy한 값이므로 true, 뒤에 dog도 Truthy하므로 dog를 반환
'cat' || 'dog' // cat
||
연산자는 둘 중 하나만 참이어도 true를 반환한다. 그래서 cat이 Truthy하므로 dog를 볼 필요없이 cat을 반환한다.
이처럼 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하고 이를 단축 평가라
한다. 단축 평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.
단축 평가는 아래와 같은 경우에 유용하다.
객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때
var elem = null;
var value = elem && elem.value; // null
함수 매개변수에 기본값을 설정할 때
function getStringLength(str) {
srt = str || '';
return str.length;
}
getStringLength();
getStringLength('hi');
옵셔널 체이닝 연산자(.?)
는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다
var ex = null;
var value = ex?.value;
console.log(value); // undefined
옵셔널 체이닝 연산자는 좌항 피연산자가 false로 평가되는 falsy 값(false, undefined, null, 0, -1, NaN, '')이라도 null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
var str = '';
var length = str?.length;
console.log(length); // 0
null 병합 연산자(??)
는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다.
var ex = null ?? 'str';
console.log(ex); // 'str'(좌항 피연산자가 null이므로 str출력)
null 병합 연산자 ??는 좌항의 피연산자가 false로 평가되는 falsy 값(false, undefined, null, 0, -1, NaN, '')이라도 null 또는 undefined가 아니면 좌항의 피연산자를 그대로 반환한다.
var ex = '' ? 'str';
console.log(ex) // ''