[ 모던 자바스크립트 스터디 ] 옵셔널 체이닝 연산자 / null 병합 연산자

2022. 9. 17. 21:15·Archive/Develop
728x90
반응형

ECMAScript2020에서 도입된 옵셔널 체이닝 연산자에 대해 알아보겠다.

 

 

옵셔널 체이닝 연산자

 

좌항의 피연산자가 null 또는 undefiend 인 경우 undefined 를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.

연산자는 ?. 이다.

 

 

var a = null;

var aValue= a?.value;

 

 

 

만약 옵셔널 체이닝 연산자 없이 바로 a.value 로 좌항의 피연산자의 value 라는 프로퍼티를 참조했을 때,

Uncaught TypeError: Cannot read properties of null (reading 'value')

에러를 봤을 것이다.

 

하지만 옵셔널 체이닝 연산자를 이용하면 에러 없이 null 또는 undefined 일때도 참조할 수 있다.

 

 

원래 이 옵셔널 체이닝 연산자가 없었을 때는 논리연산자 && 를 사용하여 단축평가를 통해 변수가 null 인지, undefined 인지 확인했었다.

 

 

var a = null;

var aValue = a && a.value;

 

위의 && 논리 연산자 가 무슨 역할인지 잘 모르겠다면, 바로 이전의 포스팅을 참고하면 될 것 같다.

 

하지만 && 연산자는 Falsy 값인 false, undefined, null, 0, -0, NaN, '' 는 무조건 좌항 피연산자를 반환한다.

 

 

만약 아래와 같은 코드가 있다면?

 

var txt = '';

var txtLen = txt && txt.length;

 

 

txtLen 변수는 ''(빈 문자열) 을 반환할 것이다.

 

 

이걸 옵셔널 체이닝 연산자를 이용하면 아래와 같은 결과를 얻을 수 있다.

 

 

 

 

 

옵셔널 체이닝 연산자 ?. 는 좌항 피연산자가 false 로 평가되는 Falsy 값이라도

 

null 또는 undefined 값이 아니라면 우항의 프로퍼티 참조를 이어간다.

따라서 위와 같은 상황이 발생하는 것이다.

 

 

null 병합 연산자

 

ECMAScript 2020 에서 도입된 null 병합 연산자 ?? 는

좌항의 피연산자가 null 혹은 undefined 인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다.

 

 

null 병합 연산자는 변수에 기본값을 정할 때 유용하게 쓰인다.

 

var a = null ?? '테스트 문자열';

 

아래와 같이 쓰일 수도 있다.

 

var a = null ? 0

 

 

이 경우 a 의 값은 0이 되는 것이다.

 

이 null 병합 연산자 등장 이전에는 변수에 기본 값을 설정할 때 논리 연산자 || 를 사용하여 설정했다.

 

var a = '' || '테스트 문자열';

 

 

이 또한 단축평가가 이루어져 falsy 값인 빈 문자열이라면 우항의 값을 그대로 반환한다.

하지만 빈 문자열이나 0 이 기본 값이 되어야 하는경우, 논리 연산자 || 를 이용하면 예상치 못한 동작이 이루어질 수도 있다.

 

 

그럴 경우에는 null 병합 연산자를 이용하면 된다.

 

null 병합 연산자는 false 로 평가되는 Falsy값이더라도 null 이나 undefined 가 아니라면 좌항의 피 연산자를 반환하기 때문이다.

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ 모던 자바스크립트 스터디 ] 원시 값과 객체 비교  (0) 2022.09.18
[ 모던 자바스크립트 스터디 ] 객체  (0) 2022.09.17
[ TypeScript ] 제네릭(Generics)  (0) 2022.09.15
[ 모던 자바스크립트 스터디 ] 단축 평가  (0) 2022.09.14
[ 모던 자바스크립트 스터디 ] 암묵적 타입 변환 & 명시적 타입 변환  (0) 2022.09.14
'Archive/Develop' 카테고리의 다른 글
  • [ 모던 자바스크립트 스터디 ] 원시 값과 객체 비교
  • [ 모던 자바스크립트 스터디 ] 객체
  • [ TypeScript ] 제네릭(Generics)
  • [ 모던 자바스크립트 스터디 ] 단축 평가
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    Python
    Django
    백준 파이썬
    Codeup
    파이썬 백준
    파이썬 기초 문제
    자바스크립트
    파이썬 알고리즘
    javascript
    docker
    자바스크립트 객체
    오라클
    비박스
    C++
    코드업 파이썬 기초 100제
    백준 문제풀이
    Oracle
    보안뉴스
    oracle db
    코드업 기초
    자바스크립트 API
    카카오 100일 프로젝트
    파이썬
    장고
    코드업
    Git
    백준
    백준 풀이
    파이썬 문제
    파이썬 기초
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ 모던 자바스크립트 스터디 ] 옵셔널 체이닝 연산자 / null 병합 연산자
상단으로

티스토리툴바