[JavaScript] ?, !

2023. 10. 7. 15:01·JavaScript
반응형

자바스크립트에서 객체의 값을 사용할 때 객체가 존재하는지 확인하는 경우가 있다. 

const data = axios.get(~);

const list = data && data.list;

async await을 사용하는 방법도 분명 존재하지만 React Query를 사용하는 경우 isSuccess 가 되기 전까지 

data는 null이 된다. 

 

React Query를 갑자기 꺼냈는데, 간단하게 async await을 사용하지 않는 경우를 말한 것이다. 

 

&&를 쓰는 행위 자체가 문제가 되지 않지만 이것을 더 간단하게 처리해줄 수 있다. 

 

? 옵셔널 체이닝

옵셔널 체이닝은 중첩된 객체의 속성이 존재하는가에 대한 조건을 간단하게 처리할 수 있다. 

const data = axios.get(~);

const list = data?.list;

? 를 사용하면 객체가 없다면 undefined를 출력한다. 

 

! 논-널 어서션 연산자

이것은 타입스크립트에서만 사용되는 것이고 옵셔널 체이닝과 완전히 다른 기능이지만 

비슷한 객체 관련 이야기를 하니깐 같이 정리한다. 

 

컴파일 옵션으로 --strickNullChecks를 지정해서 컴파일하면, 타입스크립트는 일반적으로 null인 가능성이 있는 객체에 대한 접근을 에러로 취급한다. 

 

이때 null이 아님을 나타내고 싶다면 논-널 어서션 ( Non-Null Assertion )이라는 기능을 사용해 명시적으로 문제가 없음을 전달할 수 있다. 

function getName(user? : User) {
  return user!.name;
}

사용 방법은 옵셔널 체이닝과 비슷하다. 

이때 주의할 점은 논-널 어서션은 에러를 발생시키지 않는다고 컴파일러에게 알려줄 뿐 실행시 에러가 발생할 수 있다. 

 

즉, null인 user를 User 타입으로 변경시키진 않는다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'JavaScript' 카테고리의 다른 글

[JavaScript] && 과 ? 차이  (1) 2023.11.26
[JavaScript] 자꾸 까먹는 e.preventDefault & e.stopPropagation  (2) 2023.11.11
[JavaScript] Array at 함수  (0) 2023.09.12
[JavaScript] localeCompare  (0) 2023.04.22
[JavaScript]   공백 표시가 안되는 경우  (0) 2023.04.14
'JavaScript' 카테고리의 다른 글
  • [JavaScript] && 과 ? 차이
  • [JavaScript] 자꾸 까먹는 e.preventDefault & e.stopPropagation
  • [JavaScript] Array at 함수
  • [JavaScript] localeCompare
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    덤프
    next.js
    자바스크립트
    영어회화
    식물
    ReactNative
    바질 키우기
    다이소
    리얼클래스
    네트워크
    네이버 부스트캠프
    javascript
    ChatGPT
    CSS
    프로그래머스
    알고리즘
    redux
    타일러영어
    리액트
    Docker
    Babel
    리얼학습일기
    영어독학
    바질
    react
    Node.js
    typescript
    CCNA
    webpack
    타입스크립트
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[JavaScript] ?, !
상단으로

티스토리툴바