# Nullish coalescing operator(??)

๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(Nullish coalescing operator)๋Š” ์—ฐ์‚ฐ์ž(??)์˜ ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined์ผ ๋•Œ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.

# ๊ธฐ์กด ๋ฌธ์ž์—ด ํ• ๋‹น ๋ฐฉ์‹

๊ธฐ์กด ํ•จ์ˆ˜์˜ ์ธ์ž๊ฐ€ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

function printTitle(text) {
  let title = text;
  if (text == null || text == undefined) {
    title = 'Cracking Vue.js';
  }
  console.log(title);
}

printTitle('Crack'); // Crack
printTitle(); // Cracking Vue.js

# ๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹

๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)๋ฅผ ์ด์šฉํ•œ ์œ„ ์˜ˆ์ œ ์ฝ”๋“œ์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

function printTitle(text) {
  let title = text ?? 'Cracking Vue.js';
  console.log(title);
}

printTitle('Crack'); // Crack
printTitle(); // Cracking Vue.js

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ๊ธฐ์กด์˜ if ๋ฌธ์„ ํ™œ์šฉํ•ด์„œ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ๋ฅผ ํŒ๋‹จํ–ˆ๋˜ ๋ฐฉ์‹๋ณด๋‹ค ๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“ค๊ณ , ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์ง„ ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž OR(||)์™€์˜ ์ฐจ์ด์ 

๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)์™€ ๋น„์Šทํ•œ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž OR(||)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž OR(||) ๋˜ํ•œ ์™ผ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž OR(||)๋Š” null๊ณผ undefined๋ฅผ ํฌํ•จํ•œ falsy (opens new window) ํ•œ ๊ฐ’์ธ 0, '', NaN์˜ ๊ฒฝ์šฐ์—๋„ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

function printTitle(text) {
  const title = text || 'Cracking Vue.js';
  console.log(title);
}

printTitle('Crack'); // Crack
printTitle(); // Cracking Vue.js

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž OR(||)๋Š” 0, '', NaN ๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์œ ํšจํ•œ ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function getCount(count) {
  return count || 'There is no record.';
}

getCount(0); // There is no record.
getCount(1); // 1

TIP

๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)์™€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž OR(||)๋ฅผ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค.