정의되지 않은 객체의 프로퍼티(속성)에 접근할 떄 에러를 반환하지 않고 undefined를 할당하여 프로그램이 종료 되지 않고 남은 로직을 처리 할 수 있도록 하는 문법
기본 문법
아무런 프로퍼티도 정의되지 않은 빈 객체 선언
person 객체에 선언되지 않은 name.firstName프로퍼티 호출 시 에러 발생
//아무 프로퍼티도 정의 되지 않은 빈 객체 선언
const person = {}
//person 객체에 선언되지 않은 name.firstName 프로퍼티에 접근시 에러발생
console.log( person.name.firstName)
//?.옵셔널 체이닝 문법으로 왼쪽에 있는 객체를 평가함
console.log(person?.name?.firstName)
옵셔널 체이닝 문법 ?. 을 통해 프로퍼티를 호출하게 되면 ?. 왼쪽에 있는 객체를 평가하고 평가한 객체가 falsy 값이면 다음 ?. 에러를 반환하지 않고 undefined를 할당함
const animal = {cat : 'miumiu' , horse: () => {console.log('히이잉')}}
//animal은 명시적으로 선언되었기 때문에 옵셔널 체이닝 사용 x
//cat 프로퍼티는 상황에 따라 falsy 값이 할당 될 수도 있고 아닐 수도 있음
//falsy 일때는 undefined를 할당하여 에러를 반환하지 않고 아닌 경우에는 color프로퍼티 까지 호출하여 코드진행
animal.cat?.color