ํ๋์ ๋ณด๋ ํ์ ์คํฌ๋ฆฝํธ ํธ๋๋ถ ์ ์ต๋ํ ๋ค๊ณ ๋ค๋๋ฉด์ ์ฉ์ดํ๊ฒ ํ์ ์ ๊ณต๋ถํ๋ ค๊ณ ํ์ฉํ๊ณ ์๋ค. (์ค๋๋ ํฌ์ค์ฅ์์ ํ์ฒดํ๋ฉด์ ๋ดค์ด์~)
๊ทธ๋ฐ๋ฐ Nullish ๋ณํฉ ์ฐ์ฐ์๋ผ๋ ํํธ์์ Nullish๋ผ๋ ์ฉ์ด๋ ์ฒ์ ๋ค์ด๋ณด๋ ๊ฒ ๊ฐ๋ค..
์ด๊ฒ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์๋ ์ฌ์ฉํ๋ ๊ฐ๋
์ธ๋ฐ, ๋ชจ๋ฅด๊ณ ์ง๋์ณ์จ ๋ด ์์ ์ ๋ฐ์ฑํ๋ฉด์ ๋ฐ๋ก MDN์ ์ผ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
์ ๋ชฉ์ฒ๋ผ ์ ์ํด ๋ณด์ด๊ณ ์ถ๋ค๋ฉด ๋ณํฉ ์ฐ์ฐ์ ๋์ coalescing operator๋ฅผ ์จ๋ณด๋๋ก ํ์..! ์ฌํผ
HEROPY ๋์ ํ์
์คํฌ๋ฆฝํธ Nullish ๋ถ๋ถ์ ๋ณด๋ฉด ์ด๋ฐ ๋ง์์ ํ์
จ๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ ผ๋ฆฌ ์ฐ์ฐ์ ||๋ฅผ ์ฌ์ฉํด Falsy ์ฒดํฌ(0, "", NaN, null, undefined๋ฅผ ํ์ธ)ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฌ๊ธฐ์ 0์ด๋ "" ๊ฐ์ ์ ํจ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์์น ์๋ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ, ์ด๋ด ๋ ์ ์ฉํ Nullish ๋ณํฉ(Nullish Coalescing) ์ฐ์ฐ์ ??๋ฅผ ํ์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ง ๋ ผ๋ฆฌ์ฐ์ฐ์ or์ ํตํ์ฌ Boolean ๊ฐ์ ์ฒดํฌ ํ ๋, ๋ฐ์ดํฐ ๊ฐ์ด ๋น์๊ฑฐ๋, 0์ธ ๊ฒฝ์ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์น ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ๋ง๋๋ค๋ ๋๋์ธ ๊ฒ ๊ฐ๋ค.
Mdn ์์ Nullish coalescing operator์ ๋ํ์ฌ ์์ธํ ์ ๋ฆฌ๋์ด์์ผ๋ ์ด๊ฒ์ ๋ณด๋ฉด ์ดํด์ ๋์์ด ๋ ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
Nullish coalescing operator ๋ ์ฝ๊ฐ ์ผํญ์ฐ์ฐ์ ๋๋์ผ๋ก ์๊ฐํ๋ฉด ํธํ๋ค. ์๋ ๋๊ฐ์์ง๋?
์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ null
or undefined
์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์ return ์๋๋ฉด ์ผ์ชฝ์ return ํ๋ ๋
ผ๋ฆฌ ์ฐ์ฐ์์ด๋ค.
null
, undefined
๋ฟ๋ง ์๋๋ผ falsy
๊ฐ์ ํด๋นํ ๊ฒฝ์ฐ์๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋
ผ๋ฆฌ์ฐ์ฐ์ OR (||)
๋์กฐ๋๋ค๊ณ ํ๋, ๋ฐ๋๋๋ ํน์ฑ์ธ ๋ฏ ์ถ๋ค.
๋์ฒด์ ์ธ ํ์์ ์ด๋ฌํ๋ค.
const x = leftExpr ?? rightExpr
๊ทธ๋ฆฌ๊ณ &&
, ||
์ฐ์ฐ์์ ์ง์ ์ ์ผ๋ก ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ๋ฉด Syntax error
์๋ฌ๊ฐ ์ผ์ด๋๋ค๊ณ ํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์น์ฐ์ฐ์ ํ ๋, ์ฐ์ ์์ ์ฐ์ฐ์์ ()
๊ฐ์ธ์ ์ฐ๋ฏ, ์ด ๋ํ ์ฐ์ ์์๋ฅผ ๋ช
์ํ๋ฉด ํด๊ฒฐ๋๋ค.
(null || undefined ) ?? "foo"; // returns "foo"
Null coalescing operator ๋ช
ํํ ๊ฐ์ผ๋ก null
, undefined
๋ฅผ ์ฒ๋ฆฌํด์ฃผ๊ณ , optional chaining (?.)
์ null
ํน์ undefined
์ผ ์ ์๋ ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ ๋ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค.
์๋๋ MDN ์ ์์์ด๋ค.
function getMiscObj(){
return {
aNullProperty: null,
emptyText: "", // this is not falsy
someNumber: 42
};
};
const miscObj = getMiscObj();
const newObj = {};
newObj.propA = miscObj.aNullProperty ?? "default for A";
newObj.propB = miscObj.emptyText ?? "default for B";
newObj.propC = miscObj.someNumber ?? 0;
console.log(newObj.propA); // "default for A"
console.log(newObj.propB); // "" (as the empty string is not null or undefined)
console.log(newObj.propC); // 42