[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)
  • 태그

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

티스토리툴바