?. - Optional chaining 연산자 / ?? - Null 병합 연산자

2022. 8. 22. 23:39·프론트엔드/JavaScript, TypeScript

?. - Optional chaining 연산자

객체의 프로퍼티 접근을 편하게 해준다.

const obj = {
  a = {
    b: 1
  }
}

console.log(obj.b.c) // 에러 발생
console.log(obj.b?.c) // undefined

JS는 선언되지 않은 객체의 프로퍼티를 참조하려고 하면 에러를 발생시킨다.
이를 ?.을 쓰지 않고 처리하면,

if(obj === null) return undefined
if(obj.b === null) return undefined
return obj.b.c 

이렇게 복잡하게 처리를 해야 한다.
이 때 ?.을 사용하면 obj.b?.c로 간결하게 참조할 수 있어 매우 유용하다.

?? - null 병합 연산자

왼쪽 피연산자가 null 또는 undefined일 경우 오른쪽 피연산자를 반환하고 그렇지 않을 경우 왼쪽 피연산자를 반환

const a = null ?? 'a' // a : 'a'

변수에 값이 할당되어 있지 않을 시 기본값을 설정해주는 용도로 사용할 수 있다.

구현

export const ?? = (a, b) => {
  if(a === null || a === undefined) {
      return b
  }    
  return a
}

활용

객체에서 depth 깊은 값을 찾을 때 없을 경우 기본값 지정하기

const a = obj?.a?.c?.d ?? 'invalid property name'
저작자표시 (새창열림)

'프론트엔드 > JavaScript, TypeScript' 카테고리의 다른 글

조건부 타입과 맵드 타입, 유틸리티 타입  (1) 2023.03.15
타입 가드  (1) 2023.01.25
Promise 일정 시간 초과시 대기 취소하고 에러 처리하기  (1) 2022.08.07
디바운스와 쓰로틀  (0) 2022.07.24
Vanila Js로 사진첩 사이트 만들기  (0) 2022.03.16
'프론트엔드/JavaScript, TypeScript' 카테고리의 다른 글
  • 조건부 타입과 맵드 타입, 유틸리티 타입
  • 타입 가드
  • Promise 일정 시간 초과시 대기 취소하고 에러 처리하기
  • 디바운스와 쓰로틀
정현우12
정현우12
  • 정현우12
    정현우의 개발 블로그
    정현우12
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 프론트엔드 (56)
        • JavaScript, TypeScript (12)
        • 스타일링 (1)
        • React (13)
        • Next.js (4)
        • 개발 환경 (9)
        • 테스트 (3)
        • 성능 최적화 (11)
        • 함수형 프로그래밍 (2)
        • 구조 (1)
      • 프로젝트 회고 (23)
        • 이미지편집기 개발 (7)
        • 엑셀 다운로드, 업로드 공통 모듈 개발 (4)
        • 사용자 매뉴얼 사이트 개발 (3)
        • 통계자동화 솔루션 개발 (1)
        • 엑셀 편집기 개발 (5)
        • API 플랫폼 (1)
        • 콜센터 솔루션 OB 캠페인 (1)
        • AI 스튜디오 (1)
      • 백엔드 (0)
  • 블로그 메뉴

    • 홈
    • 포트폴리오
    • 태그
  • 인기 글

  • 태그

    JavaScript
    커스텀 훅
    useReducer
    사용자 매뉴얼 사이트
    이미지 편집기
    webpack
    회고
    React
    라이브러리 선정
    렌더링 성능 최적화
    엑셀 에디터
    memoization
    웹 성능 최적화
    로딩 성능 최적화
    frontend
    엑셀
    TypeScript
    React-boilerplate
    Next.js
    Github Actions
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정현우12
?. - Optional chaining 연산자 / ?? - Null 병합 연산자
상단으로

티스토리툴바