일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 메모이제이션
- 크래프톤
- github #github세팅 #깃허브 #깃허브잔디
- 다이나믹프로그래밍
- 데이터처리
- 상태관리
- 분할정복
- 1:1관계
- recursive
- 포인터선언
- MySQL
- 크래프톤정글
- 이진탐색
- 항해99 #1주차 #미니프로젝트 #WIL
- Redux
- Mac #M1 #node #노드버전 #노드다운그레이드
- insertion
- 재귀함수
- calloc
- 포인터접근
- Recoil
- github #깃허브 #깃허브설정 #깃허브업로드
- 동적메모리할당
- realloc
- 탑다운
- 지역성
- NULL포인터
- 알고리즘
- 보텀업
- 크래프톤정글2기
- Today
- Total
우당탕탕 개발일지
옵셔널 체이닝이란? 본문
'?.'의 형태로 사용하며 체인으로 이루어진 각 참조가 유효한지 명시적으로 검증하지 않고 연결된 객체 체인 내에 깊숙히 위치한 속성 값을 읽을 수 있는 연산자이다. 체이닝 연산자와 비슷하게 동작하지만, 만약의 참조가 null 혹은 undefined여도 에러식을 뱉지 않고 undefined값을 리턴한다. 함수 호출시에도 마찬가지로 값이 없다면 undefined를 리턴한다.
?.을 사용하면 프로퍼티가 없는 중첩 객체를 에러 없이 안전하게 접근할 수 있다.
옵셔널 체이닝이 필요한 이유
1. 사용자가 여러 명 있는데 그중 몇 명은 주소 정보를 가지고 있지 않다고 가정해보자. 이럴 때 user.address.street를 사용해 주소 정보에 접근하면 에러가 발생할 수 있다.
let user = {}; // 주소 정보가 없는 사용자
alert(user.address.street); // TypeError: Cannot read property 'street' of undefined
2.브라우저에서 동작하는 코드를 개발할 때 발생할 수 있는 문제가 있다. 자바스크립트를 사용해 페이지에 존재하지 않는 요소에 접근해 요소의 정보를 가져오려 하면 문제가 발생한다.
// querySelector(...) 호출 결과가 null인 경우 에러 발생
let html = document.querySelector('.my-element').innerHTML;
?.이 추가되기 전엔 이런 문제들을 해결하기 위해 && 연산자를 사용했다. 중첩 객체의 특정 프로퍼티에 접근하기 위해 거쳐야 할 구성요소들을 AND로 연결해 실제 해당 객체나 프로퍼티가 있는지 확인하는 방법을 사용했었죠. 그런데 이렇게 AND를 연결해서 사용하면 코드가 아주 길어진다는 단점이 있습니다.
let user = {}; // 주소 정보가 없는 사용자
alert( user && user.address && user.address.street ); // undefined, 에러가 발생하지 않습니다.
?.은 ?.'앞’의 평가 대상이 undefined나 null이면 평가를 멈추고 undefined를 반환한다.
옵셔널 체이닝을 사용해 user.address.street에 접근
let user = {}; // 주소 정보가 없는 사용자
alert( user?.address?.street ); // undefined, 에러가 발생하지 않습니다.
풀어서 해석해보면 이런 식이 될 수 있다한다.
user.address
user?.address
= ((user ===null || user === undefined) ? undefined : user.address
-> 어떤 경우에 사용하는지?
-> 에러가 없어야 하는이유? 제작시에는 필요할텐데!!
Reference
https://rootjang-dev.tistory.com/2
[JavaScript] '?' 옵셔널 체이닝은 무엇일까?
* 구식 브라우저에는 폴리필이 필요합니다. Optional Chaining은 ES2020에서 등장한 새로운 연산자로서 '?.'의 형태로 사용하며 체인으로 이루어진 각 참조가 유효한지 명시적으로 검증하지 않고 연결
rootjang-dev.tistory.com
'React' 카테고리의 다른 글
map과 forEach의 차이점은? (0) | 2022.10.03 |
---|---|
TDZ(Temporal Dead Zone/일시적 사각지대)란? (0) | 2022.09.29 |
React-router-dom v5 vs v6 (1) | 2022.07.14 |
React 입문 실습 (0) | 2022.07.01 |
호이스팅과 TDZ는 무엇일까 ? (1) | 2022.07.01 |