# 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(||
)๋ฅผ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ์ฌ์ฉํ์๋ฉด ์์ฃผ ์ข์ต๋๋ค.
โ Modules Default parameter โ