책에서 &&와 ||를 이용한 단축 평가, null 병합 연산자를 설명할 때는 특정 조건에서 '피연산자를 반환한다'고 표현했다. 하지만 옵셔널 체이닝을 설명할 때만 '우항의 프로퍼티 참조를 이어간다'라고 다르게 표현한 것이 신기해서 주제로 선정했다.
옵셔널 체이닝은 ECMAScript 2020에서 도입됐는데, 다음의 이유로 인해 등장하게 되었다.
null
또는 undefined
일 경우 에러가 발생할 수 있고 프로그램이 예기치 않게 중단될 수 있음let user = {};
console.log(user.address.street);
let user = {};
console.log( user.address?.street );
let html = document.querySelector('.my-element').innerHTML;
let html = document.querySelector('.my-element')?.innerHTML;
console.log( html );
&&
의 단점 보완&&
를 사용했음&&
를 사용하면 다음과 같은 단점이 발생했음null
, undefined
가 아니면 우항의 프로퍼티 참조를 이어감let str = '';
let length = str && str.length;
console.log(length);
let str = '';
let length = str?.length;
console.log(length);
let user = {};
console.log( user && user.address && user.address.street );
let user = {};
console.log( user?.address?.street );
책에서 다루지 않은 옵셔널 체이닝 연산자의 활용 예시를 가지고 왔다.
?.
는 &&
와 ||
처럼 조건식 전체를 평가하지 않고도 결과를 빠르게 반환하는 단축 평가를 함null
또는 undefined
이면 즉시 평가를 멈춤let user = null;
let x = 0;
user?.sayHi(x++); // user가 null이므로 x는 증가하지 않음
console.log(x); // 0
?.()
를 사용해 admin의 존재 여부를 확인함user1
에는 admin
이 정의되어 있기 때문에 메서드가 제대로 호출되었고 user2
에는 admin
이 정의되어 있지 않았음에도 불구하고 메서드를 호출하면 에러 없이 평가가 멈춤let user1 = {
admin() {
console.log("관리자 계정입니다.");
}
}
let user2 = {};
user1.admin?.(); // 관리자 계정입니다.
user2.admin?.();
delete user?.name;
옵셔널 체이닝 연산자는 객체의 속성에 접근할 때 중간에 속성이 없거나 null 또는 undefined일 경우에도 코드 실행을 중단시키지 않고 안전하게 처리한다. 또한, 코드 작성 시 예외 상황에 대한 대응을 더 간편하게 할 수 있게 한다.