πŸ“” Studying/JavaScript

[Javascript] 널 λ³‘ν•©μ—°μ‚°μž '??'와 μ˜΅μ…”λ„ 체이닝 '?.'

sero. 2022. 12. 1. 21:23
728x90

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ '?'

ES2020μ—μ„œ λ„μž…λœ μƒˆλ‘œμš΄ 문법듀 쀑 μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž ?. 와 null 병합 μ—°μ‚°μž ?? λŠ” λͺ¨λ‘ λ¬ΌμŒν‘œλ₯Ό μ“΄λ‹€.

μ‚¬μš©λ˜λŠ” 방식도 nullμ΄λ‚˜ undefined 값을 체크할 수 μžˆλ‹€λŠ” μ μ—μ„œ λΉ„μŠ·ν•œ 것 μžˆλŠ” 것 κ°™μ•„, 이 λ‘˜μ„ ν•œλ²ˆ λ¬Άμ–΄μ„œ 정리해보면 μ’‹κ² λ‹€ μ‹Άμ–΄μ„œ μž‘μ„±ν•˜κ²Œ λ˜μ—ˆλ‹€. πŸ™‚

 

 

null 병합 μ—°μ‚°μž

μš°μ„  null 병합 μ—°μ‚°μž(nullish coalescing) ??은 κ°„λ‹¨ν•˜κ²Œ 값이 ν• λ‹Ήλ˜μ–΄ μžˆλŠ” λ³€μˆ˜λ₯Ό μ‰½κ²Œ 찾을 수 μžˆλ‹€.

즉 undefinedμ΄λ‚˜ null이 μ•„λ‹Œ 값이 ν• λ‹Ήλœ 경우λ₯Ό λ§ν•œλ‹€.

 

a ?? b

이 μ—°μ‚°μžλŠ” μœ„μ™€ 같이 μ“Έ 수 μžˆλŠ”λ°, 이런 μ‹μœΌλ‘œ 해석할 수 μžˆλ‹€.

  • aκ°€ null 도 μ•„λ‹ˆκ³  undefinedκ°€ μ•„λ‹ˆλΌλ©΄ a
  • κ·Έ μ™Έ(nullμ΄λ‚˜ undefined)μ—λŠ” b

 

같은 방식을 μ‚Όν•­ μ—°μ‚°μžλ‘œ 풀어써보면 이렇닀.

let a = (a !== null && a !== undefined) ? a : b 

null 병합 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ λ¬΄μ§€ν•˜κ²Œ μ§§μ•„μ§€λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

 

이 μ—°μ‚°μžλŠ” νŠΉνžˆλ‚˜ λ³€μˆ˜μ— 기본값을 μ„€μ •ν•  λ•Œ μœ μš©ν•˜λ‹€.

null 병합 μ—°μ‚°μžκ°€ λ„μž…λ˜κΈ° μ „μ—λŠ” 논리 μ—°μ‚°μž OR을 λœ»ν•˜λŠ” || 을 많이 μ΄μš©ν–ˆμ—ˆκ³ , μ‹€μ œλ‘œ μœ„ μ˜ˆμ‹œλ₯Ό || μ—°μ‚°μžλ‘œ 바꾸어도 κ²°κ³ΌλŠ” λ™μΌν•˜λ‹€.

const test = null ?? 'default';
const test2 = null || 'default';

 

차이λ₯Ό λ“€μžλ©΄ || μ—°μ‚°μžμ˜ 경우 μ™Όμͺ½μ΄ Falsyν•œ 값일 경우 였λ₯Έμͺ½ 값을 λ°˜ν™˜ν•˜κ³ ,

?? μ—°μ‚°μžμ˜ 경우 μ™Όμͺ½μ΄ nullμ΄λ‚˜ undefined둜 μ •μ˜λœ 것이 μ•„λ‹ˆλΌλ©΄ 였λ₯Έμͺ½ 값을 λ°˜ν™˜ν•œλ‹€λŠ” 것이닀.

 

nullκ³Ό undefined, 숫자 0을 ꡬ뢄 지어 닀뀄야 ν•  λ•Œ, 0은 Falsyν•œ 값이기 λ•Œλ¬Έμ— ||λ³΄λ‹€λŠ” ?? κ°€ λ”μš± μ ν•©ν•˜λ‹€κ³  ν•˜λ‹€.

 

 

μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž

μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μžλŠ” 쀑첩 κ°μ²΄μ—μ„œ ν”„λ‘œνΌν‹°κ°€ nullμ΄λ‚˜ undefinedκ°€ μ•„λ‹Œμ§€ ν™•μΈν•˜κ±°λ‚˜ μ°Έμ‘°κ°€ μœ νš¨ν•œμ§€ 확인할 λ•Œ μœ μš©ν•˜λ‹€.

 

a?.b

μ™Όμͺ½ μ—°μ‚°μžκ°€ nullμ΄κ±°λ‚˜ undefined인 경우 undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

그렇지 μ•Šλ‹€λ©΄ 였λ₯Έμͺ½ ν”„λ‘œνΌν‹°μ˜ μ°Έμ‘°λ₯Ό 이어간닀.

const elem = null;
const value = elem?.value;

 

μœ„ μ½”λ“œλ₯Ό 보면 λ³€μˆ˜ valueλŠ” λ³€μˆ˜ elem이 nullμ΄κ±°λ‚˜ undefined인지 ν™•μΈν•˜κ³  μžˆλ‹€.

λ³΄λ‹€μ‹œν”Ό elem은 null이 ν• λ‹Ήλ˜μ–΄ 있기 λ•Œλ¬Έμ— undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

const elem = {  
value: 'hello',  
};  
const value = elem?.value;

이제 elem이 객체둜 μ„ μ–Έλ˜μ—ˆκ³  valueλΌλŠ” ν”„λ‘œνΌν‹°λ₯Ό κ°–κ³  있기 λ•Œλ¬Έμ— 값을 λ°˜ν™˜ν•˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

 

null 병합 μ—°μ‚°μžμ™€ λΉ„μŠ·ν•˜κ²Œ μ΄μ „μ—λŠ” 논리 μ—°μ‚°μž &&을 μ΄μš©ν•΄μ„œ λ³€μˆ˜κ°€ nullμ΄κ±°λ‚˜ undefined인 경우λ₯Ό ν™•μΈν•˜λŠ” 방법을 많이 μ‚¬μš©ν–ˆλ‹€. μ—­μ‹œ Falsy ν•œ 경우λ₯Ό λ”°μ‘ŒκΈ° λ•Œλ¬Έμ— Falsy 값에 ν•΄λ‹Ήν•˜λŠ” 0μ΄λ‚˜ ''λ₯Ό κ±°λ₯Ό 수 μ—†μ—ˆλ‹€λŠ” 점..

const elem = null;
const value = elem && elem.value;

 

 

ν•˜μ§€λ§Œ μ˜΅μ…”λ„ 체인지 μ—°μ‚°μžλŠ” Falsyν•œ 값이라도 nullμ΄κ±°λ‚˜ undefinedν•œ 경우λ₯Ό λ°”λ‘œ 확인할 수 μžˆλ‹€!

 

 

 

 

μ°Έκ³ 

μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ https://ko.javascript.info/nullish-coalescing-operator

 

MDN https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Optional_chaining

 

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive 9μž₯ 9.4.2, 9.4.3

 

 

 

728x90