์๋ฐ์คํฌ๋ฆฝํธ์ '?'
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
'๐ Studying > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] parameter์ argument (0) | 2023.03.28 |
---|---|
[JavaScript] ํธ์ด์คํ Hoisting๊ณผ TDZ (0) | 2023.03.28 |
[Javascript] ์คํ ์ปจํ ์คํธ (0) | 2022.11.30 |
[Javascript] ์ฐธ์กฐํ ๋ฐ์ดํฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ (0) | 2022.11.29 |
[JavaScript] ์ถ์ฒ ๊ฒ์์ด ๋์ฐ๊ธฐ (0) | 2022.08.11 |
Comment