[모던자바스크립트] 옵셔널 체이닝 '?.'

hana jeong·2022년 12월 19일
0

모던자바스크립트

목록 보기
15/15

모던자바스크립트를 읽고 요약한 내용입니다 틀린 부분이 있다면 말씀해주세요

옵셔널 체이닝(optional chaining)


  • ?.을 사용하면 프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있다

  • ?.?. 앞의 평가 대상이 undefined나 null이면 평가를 멈추고 undefined를 반환한다

let user = {}; // 주소 정보가 없는 사용자
alert( user?.address?.street ); // undefined, 에러가 발생하지 않습니다.

user가 주소를 안 적었다고 에러를 내는 것보다 undefined로 두는 것이 훨씬 효율적이다
그래서 ?.는 존재하지 않아도 괜찮은 대상에만 사용해야 한다

  • ?.는 왼쪽에 평가대상에 값이 없으면 즉시 평가를 멈춘다
    이런 평가 방법을 단락 평가라고 부른다
    때문에 ?. 오른쪽에 있는 것들은 ?.의 평가가 멈췄을 때 더는 일어나지 않는다

let user = null;
let x = 0;

user?.sayHi(x++); // 아무 일도 일어나지 않습니다.

alert(x); // 0

  • ?.은 연산자가 아니라 함수나 대괄호와 함께 동작하는 특별한 문법 구조체이다
let user1 = {
  firstName: "Violet"
};

let user2 = null; // user2는 권한이 없는 사용자라고 가정해봅시다.

let key = "firstName";

alert( user1?.[key] ); // Violet
alert( user2?.[key] ); // undefined

alert( user1?.[key]?.something?.not?.existing); // undefined

  • ?.은 delete와 함께 사용할 수 있다
delete user?.name; // user가 존재하면 user.name을 삭제합니다
  • ?.은 읽기나 삭제하기에는 사용할 수 있지만 쓰기에는 사용할 수 없다
  • ?.은 할당 연산자 왼쪽에서 사용할 수 없다

옵셔널 체이닝에서 기억해야할 점


  • ?.?. 앞의 평가 대상이 undefined나 null이면 평가를 멈추고 undefined를 반환한다
  • 꼭 있어야 하는 값인데 없는 경우에 ?.을 사용하면 프로그래밍 에러를 쉽게 찾을 수 없다. 따라서 ?. 왼쪽에 오는 왼쪽 평가대상이 없어도 괜찮은 경우에만 선택적으로 사용해야한다
profile
https://developer-hh.tistory.com 로 옮깁니다

0개의 댓글