[9장] 단축평가 - 옵셔녈 체이닝 연산자와 null 병합 연산자

📂9장 타입 변환과 단축 평가

옵셔널 체이닝 연산자

  • .? : 좌항이 null,undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어감.
let user = {}; // 주소 정보가 없는 사용자

alert( user ?. user.address); // undefined, 에러가 발생하지 않습니다.
alert( user ?. user.address.street); // undefined

// 만약 address가 필수값이 아닐때, user.address.street는 에러가 발생함.
alert(user.address?.street) // 그럴경우 이 코드처럼 사용함.
  • 선언이 완료된 변수가 좌항에 있어야함.
  • ?.를 계속 연결해서 체인을 만들면 중첩 프로퍼티들에 안전하게 접근할 수 있음.
    • 단, ?.은 ?.좌항이 없어도 괜찮은 경우에만 선택적으로 사용해야 함.
      • why? 에러를 발생하지 않기때문에 디버깅이 어려움
let str = '';

const length = str && str.lenth; // null과 undefined는 아니지만 빈 문자열은 false임.
console.log(length) // ''

const length = str ?. length; // 옵셔널 체이닝 연산자는 null과 undefined만 
console.log(length) // 0
  • 논리 연산자를 활용하여 작성 할수도 있지만 null과 undefined가 아닌 Falsy값일때 우항을 참조하지 않고 좌항을 참조하여 오류를 발생함.

null 병합 연산자

  • ES11에 도입된 null 병합 연산자
  • 좌항 ?? 우항 : 좌항이 null, undefined이면 우항 반환, 그렇지 않으면 좌항 반환
  • 그 이전에는 || 연산자를 사용한 단축 평가를 통해 변수에 기본값 설정.
    • 하지만, 0 이나 빈 문자열('')을 값으로 설정하고 싶을때 예측하지 못한 동작 발생 할 수 있음.
let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0

heigth ?? 100

    • heigth 값이 null이나 undefined이면 기본값으로 100을 설정함.
alert(height || 100); // 100
    • 0도 값인데 논리 연산자를 사용하면 false이니깐 100이 반환됨.
alert(height ?? 100); // 0
  • heigth 값이 null이나 undefined이 아니고 0이란 값이 있으니 0 반환함.

2022.12.12 - [개발언어/[JS] deep-dive 정리] - [9장] 단축 평가

 

[9장] 단축 평가

📂9장 단축 평가 단축 평가 단축 평가 : 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것. 논리 연산자를 사용한 단축 평가 규칙 true || anyting => true false || anyt

menduck.tistory.com

2022.12.12 - [개발언어/[JS] deep-dive 정리] - [9장] 타입 변환

 

[9장] 타입 변환

📂9장 타입 변환 타입 변환 코드를 예측하기 위해 타입 변환이 어떻게 동작하는지 정확히 이해하고 사용해야함. 오류를 생산할 가능성을 줄일 수 있음. 타입변환 이란? var x = 10; var str = x + ''; con

menduck.tistory.com


참고 - https://ko.javascript.info/optional-chaining , https://ko.javascript.info/nullish-coalescing-operator

[모던 자바스크립트 Deep Dive, ⌜이웅모 ⌟, 위키북스, 20210103]를 읽고 정리한 글입니다.

'개발언어 > [JS] deep-dive 정리' 카테고리의 다른 글

[10장] 객체 리터럴  (0) 2022.12.14
[9장] 단축 평가 - 논리 연산자를 사용한 단축 평가  (0) 2022.12.12
[9장] 타입 변환  (0) 2022.12.12
8장 제어문  (2) 2022.12.10
6장 데이터 타입  (0) 2022.12.07

댓글