๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปSTUDY/JavaScript

[JavaScript] nullish ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž ??

๋ฐ˜์‘ํ˜•

nullish ๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž ??

์ตœ๊ทผ์— ์ถ”๊ฐ€๋จ.
์ŠคํŽ™์— ์ถ”๊ฐ€๋œ์ง€ ์–ผ๋งˆ์•ˆ๋œ ๋ฌธ๋ฒ•. ๊ตฌ์‹ ๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ฆฌํ•„์ด ํ•„์š”ํ•˜๋‹ค.

nullsh ๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž(nullish coalescing operator) ??๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์งง์€ ๋ฌธ๋ฒ•์œผ๋กœ ์—ฌ๋Ÿฌ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ๊ทธ ๊ฐ’์ด ํ™•์ •๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

a ?? b ์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • a๊ฐ€ null๋„ ์•„๋‹ˆ๊ณ  undefined๋„ ์•„๋‹ˆ๋ฉด a
  • ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ b

nullish ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž ??์—†์ด x = a ?? b์™€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

x = (a !== null && a !== undefined) ? a : b;

??์™€ ||์˜ ์ฐจ์ด

  • ||๋Š” ์ฒซ ๋ฒˆ์งธ truthy๊ฐ’์„ ๋ฐ˜ํ™˜.
  • ??๋Š” ์ฒซ ๋ฒˆ์งธ ์ •์˜๋œ(defined) ๊ฐ’์„ ๋ฐ˜ํ™˜.
  • null๊ณผ undefined, ์ˆซ์ž 0์„ ๊ตฌ๋ถ„์ง€์–ด ๋‹ค๋ค„์•ผ ํ•  ๋•Œ ๋งค์šฐ ์ค‘์š”.
// height์— ๊ฐ’์ด ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ height์—” 100์ด ํ• ๋‹น.
height = hegiht ?? 100;
let height = 0;
alert(height || 100);
alert(height ?? 100);

height || 100์€ height์— 0์„ falsy(0 = false)ํ•œ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰, null์ด๋‚˜ undefined๋ฅผ ํ• ๋‹นํ•œ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰. 100์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ๋Š”๋‹ค. ๋ฐ˜๋ฉด, height ?? 100์˜ ํ‰๊ฐ€๊ฒฐ๊ณผ๋Š” height๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ null์ด๋‚˜ undefined์ผ ๊ฒฝ์šฐ์—๋งŒ 100์ด ๋œ๋‹ค. 0์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

??๋Š” ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’ใ…‡๋ฅด ํ• ๋‹นํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

// height๊ฐ€ null์ด๋‚˜ undefined์ธ ๊ฒฝ์šฐ, 100์„ ํ• ๋‹น.
height = height ?? 100;

์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„

  • ??์˜ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๋Š” ๋Œ€๋‹ค์ˆ˜์˜ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋‚ฎ๊ณ  ?์™€ =๋ณด๋‹ค๋Š” ๋†’๋‹ค.
  • ๊ด„ํ˜ธ์—†์ด ??๋ฅผ ||๋‚˜ &&์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ธˆ์ง€๋˜์–ด ์žˆ๋‹ค.

 

Reference

nullish ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž '??'

๋ฐ˜์‘ํ˜•