옵셔널 체이닝 ?.
앞에 있는 것이 참(truthy)인 값이면 뒤 코드를 실행하고, 거짓(falsy)인 값이면 코드를 통째로 undefined를 만들어버린다.
옵셔널 체이닝 ?.을 사용하면 프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있다.
?.은 ?.'앞’의 평가 대상이 undefined
나 null
이면 평가를 멈추고 undefined
를 반환한다.
const obj = undefined;
const arr = undefined;
const func = undefined;
obj?.b; //undefined
arr?.[0]; //undefined
func?.(); //undefined
객체나 배열뿐만 아니라 함수에도 옵셔널 체이닝을 적용할 수 있다. 속성에 접근하거나 호출하려는 것이 거짓인 값인지 아닌지 의심될 때 옵셔널 체이닝을 적용한다.
?.
앞의 변수는 꼭 선언되어 있어야 한다.
예를 들어 user?.anything을 사용하려면 let이나 const, var를 사용해 변수 user를 정의해야 한다. 이렇게 옵셔널 체이닝은 선언이 완료된 변수를 대상으로만 동작한다.
?.
은 연산자가 아니다.
?.은 함수나 대괄호와 함께 동작하는 특별한 문법 구조체(syntax construct)이다.
?.
은 읽기나 삭제하기에는 사용할 수 있지만 쓰기에는 사용할 수 없다.
user?.name = "Violet"; // SyntaxError: Invalid left-hand side in assignment
// 에러가 발생하는 이유는 undefined = "Violet"이 되기 때문이다.