옵셔널 체이닝(Optional Chaining): ?.
?.
: 앞의 객체가 null 또는 undefined일 경우, 에러를 발생시키지 않고 undefined 반환
- 객체 속성 값이나 메서드에 안전하게 접근할 수 있도록 돕는 연산자
- ?. 앞 평가 대상에만 동작⭕, 확장❌
- ?. 앞의 변수는 꼭 선언되어 있어야 한다.
* 변수
?.prop
let user = null;
alert( user?.address ); // undefined
alert( user?.address.street ); // undefined
// user?. => user가 null이나 undefined인 경우만 처리
// user가 실제 값이 존재하는 경우엔 반드시 user.address 프로퍼티는 있어야 함
// 그렇지 않으면 user?.address.street의 두 번째 점 연산자(address.street)에서 에러 발생
* 함수
method?.()
let user1 = {
admin() {
alert("관리자 계정입니다.");
}
}
let user2 = {};
user1.admin?.(); // 관리자 계정입니다.
user2.admin?.(); // 그냥 평가를 멈춤(에러 x)
* 객체
?.[prop]
let user1 = {
firstName: "Violet"
};
let user2 = null;
let key = "firstName";
alert( user1?.[key] ); // Violet
alert( user2?.[key] ); // undefined
alert( user1?.[key]?.something?.not?.existing); // undefined
예제
function optionalChaining() {
const topic = {
_title: '매년 업데이트 되는 ECMAScript',
getTitle() {
return this._title;
},
setTitle(value) {
this._title = value;
},
};
console.log(topic?.getTitle?.()); // '매년 업데이트 되는 ECMAScript'
console.log(topic?.getName?.()); // undefiend
}