❗️ 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것

🔮 논리 연산자 사용

논리합 또는 논리곱 연산자 표현식의 평가 결과는 불리언 값이 아닐 수도 있다.
논리합 또는 논리곱 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가 된다.

'Cat' && 'Dog'
  • 위의 결과는 ‘Dog’ 가 된다.
  • 논리곱의 경우 좌항이 true로 평가되면 우항에 따라 결과가 달라진다.
  • 즉 논리곱 연산자는 좌항에서 우항으로 평가가 진행된다.
  • 논리 연산의 결과를 결정한 우항의 값을 그대로 반환한다.
'Cat' || 'Dog'
  • 위의 결과는 ‘Cat’가 된다.
  • 논리합의 경우 좌항이 true일 경우 우항의 결과에 상관없이 ture를 반환한다.
  • 즉, 논리합 연산자도 좌항에서 우항으로 평가가 진행된다.
  • 논리 연산의 결과를 결정한 좌항의 값을 그대로 반환한다.

이처럼 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 변환한다.

🎃 단축 평가 사용 예

프로퍼티 참조할 때

객체를 가리키기를 기대하는 변수의 값이 객체가 아닌 null 또는 undefined 인 경우 객체의 프로퍼티를 참조하면 타입 에러가 발생

  • 에러를 방지하기 위해 단축 평가를 사용한다.
const elem = null;
const value = elem && elem.value
  • 만일 단축평가를 하지 않고 elem.value 를 했다면 타입 오류로 프로그램이 종료되었을 것이다.

함수 매개변수에 기본 값을 설정할 때

  • 함수를 호출할 때 인수를 전달하지 않으면 매개변수에는 undefined가 할당된다.
  • ES6의 매개변수 기본값 설정 방식도 있다.
function fun(str){  // 단축 평가 사용
    str = str || '';
    return str.length;
}
fun();  // 0
fun('hi');  // 2
function fun(str = ''){  // 매개변수 기본값 설정
    return str.length;
}
fun();  // 0
fun('hi');  // 2

🔗 옵셔널 체이닝 연산자

ES11 에서 도입된 옵셔널 체이닝(optional chaining) 연산자 ?. 는 좌항의 피연산자가 null 또는 undefined 인 경우 undefined 를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.

const elem = null;
const value = elem?.value;
  • elem 이 null 이기에 value 의 값은 undefined 가 된다.
  • 해당 연사자가 도입되기 전에는 논리 연산자 && 를 사용해 단축 평가를 통해 변수가 null 인지 undefined 인지를 확인했다.
  • 논리 연산자일 경우 Falsy 값이면 우항의 프로퍼티 참조를 이어가지 않았지만, 옵셔널 체이닝 연산자는 null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
  • ex) 논리 연산자는 0을 false로 판단하여 참조를 이어가지 않지만 옵셔널 체이닝 연산자는 참조를 이어간다.

📑 null 병합 연산자

ES11 에서 도입된 null 병합 연산자 ?? 는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고 그렇지 않으면 좌항의 피연산자를 반환한다

const value = null ?? 'default string'; // 'default string'
  • null 병합 연산자는 변수에 기본값을 설정 할 때 유용
  • 해당 연산자가 도입되기 전에는 논리 연산자 || 를 사용한 단축 평가를 통해 변수에 기본 값을 설정 했다.
  • 논리 연산자일 경우 Falsy 값이면 우항의 피연산자를 반환한다. 0이거나 ‘‘도 기본밗으로서 유효하다면 예기치 못한 동작이 발생할 수 있다.

댓글남기기