[ 모던 자바스크립트 스터디 ] 옵셔널 체이닝 연산자 / 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 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바