ES11์์ ๋์ ๋ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(?.)๋ ์ขํญ์ ํผ์ฐ์ฐ์๊ฐ null ๋๋ undefined์ธ ๊ฒฝ์ฐ undefined๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฐํญ์ ํ๋กํผํฐ ์ฐธ์กฐ๋ฅผ ์ด์ด๊ฐ๋ค.
๐พ#01
let el = { value: 'value'};
console.log(el?.value); // value
el = { };
console.log(el?.value); // undefined
๐ก ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ๋ณ์๊ฐ null ๋๋ ubdefined๊ฐ ์๋์ง ํ์ธํ๊ณ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ ๋ ์ ์ฉํ๋ค.
๐พ#02
let el = null;
console.log(el?.value); // undefined
๐ก 0 ๊ณผ ''์ ๊ฐ์ฒด๋ก ํ๊ฐ๋ ๋๋ ์๋ค. ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, ๋ ผ๋ฆฌ์ฐ์ฐ์ &&์ ์ฌ์ฉํ ๋จ์ถํ๊ฐ ๋ณด๋ค๋ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐พ#03
let str = '';
console.log(str && str.length); // ''
console.log(str?.length); // 0
ES11์์ ๋์ ๋ null๋ณํฉ ์ฐ์ฐ์ ??๋ ์ขํญ์ ํผ์ฐ์ฐ์๊ฐ null๋๋ undefined์ธ ๊ฒฝ์ฐ ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ขํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๋ค.
๐ก ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ ๋ ์ ์ฉํ๋ค.
๐พ#01
let a;
let val = a ?? 'default'
console.log(val); // default
๐ก 0 ๊ณผ ''์ด ์ ํจํ ๊ฐ์ผ ๊ฒฝ์ฐ, ๋ ผ๋ฆฌ ์ฐ์ฐ์(||)๋ฅผ ์ฌ์ฉํ ๋จ์ถํ๊ฐ ๋ณด๋ค๋ null ๋ณํฉ ์ฐ์ฐ์(??)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐พ#02
let a = 0;
let val;
val = a || 'default';
console.log(val); // default
val = a ?? 'default';
console.log(val); // 0
์ฐธ๊ณ ) ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive