์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌผ์Œํ‘œ(?) ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ: 3๊ฐ€์ง€ ์‚ฌ์šฉ๋ฒ• ์™„์ „ ์ •๋ณต

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌผ์Œํ‘œ(?) ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ: 3๊ฐ€์ง€ ์‚ฌ์šฉ๋ฒ• ์™„์ „ ์ •๋ณต

D
dongAuthor
5 min read

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌผ์Œํ‘œ(?) ์‚ฌ์šฉ๋ฒ•์„ ์ด์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, ์˜ต์…”๋„ ์ฒด์ด๋‹, ๋„๋ฆฌ์‰ฌ ์ฝœ๋ ˆ์‹ฑ์˜ ๊ฐœ๋…๊ณผ ์‹ค๋ฌด ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“œ์„ธ์š”.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋‹ค ๋ณด๋ฉด ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋“ฑ์žฅํ•˜๋Š” ๋ฌผ์Œํ‘œ(?) ๋•Œ๋ฌธ์— ๊ณ ๊ฐœ๋ฅผ ๊ฐธ์›ƒํ•œ ๊ฒฝํ—˜, ๋‹ค๋“ค ํ•œ ๋ฒˆ์ฏค ์žˆ์œผ์‹ค ๊ฑฐ์˜ˆ์š”. if๋ฌธ๊ณผ ๋น„์Šทํ•ด ๋ณด์ด๊ธฐ๋„ ํ•˜๊ณ , ๊ฐ์ฒด ์†์„ฑ์— ๋ถ™์–ด ์žˆ๊ธฐ๋„ ํ•˜๊ณ , ์—ฐ์‚ฐ์ž ์‚ฌ์ด์— ๋œฌ๊ธˆ์—†์ด ๋‚˜ํƒ€๋‚˜๊ธฐ๋„ ํ•˜์ฃ .

์ด ๋ฌผ์Œํ‘œ๋“ค์€ ์‚ฌ์‹ค ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์šฐ์•„ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์•„์ฃผ ์œ ์šฉํ•œ ๋ฌธ๋ฒ•์  ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์‹ค๋ฌด์—์„œ๋Š” ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๊ณ  ์˜ˆ์™ธ ์ƒํ™ฉ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉ๋ผ์š”.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ๋ฌผ์Œํ‘œ(?)์˜ ์„ธ ๊ฐ€์ง€ ์šฉ๋ฒ•์ธ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, ์˜ต์…”๋„ ์ฒด์ด๋‹, ๊ทธ๋ฆฌ๊ณ  ๋„๋ฆฌ์‰ฌ ์ฝœ๋ ˆ์‹ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ๋ฒ•์ด ์™œ ํ•„์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์ฝ”๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•œ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ด ๋“œ๋ฆด๊ฒŒ์š”. ์ด ๊ธ€์„ ๋๊นŒ์ง€ ์ฝ์œผ์‹œ๋ฉด ๋” ์ด์ƒ ๋ฌผ์Œํ‘œ๋ฅผ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š๊ณ  ์ž์œ ์ž์žฌ๋กœ ํ™œ์šฉํ•˜๋Š” ์ž์‹ ์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋  ๊ฒ๋‹ˆ๋‹ค!

1. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (Ternary Operator): ์กฐ๊ฑด ? ๊ฐ’1 : ๊ฐ’2

์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” if...else ๋ฌธ์„ ํ•œ ์ค„๋กœ ์ถ•์•ฝํ•ด์ฃผ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฌผ์Œํ‘œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์ฒ˜๋Ÿผ ์„ธ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž(์กฐ๊ฑด, ์ฐธ์ผ ๋•Œ ๊ฐ’, ๊ฑฐ์ง“์ผ ๋•Œ ๊ฐ’)๋ฅผ ํ•„์š”๋กœ ํ•˜์ฃ .

  • ๋ฌธ๋ฒ•: ์กฐ๊ฑด ? ์ฐธ์ผ_๋•Œ_ํ‘œํ˜„์‹ : ๊ฑฐ์ง“์ผ_๋•Œ_ํ‘œํ˜„์‹

if...else ๋ฌธ๊ณผ ๋น„๊ตํ•ด ๋ณด๋ฉด ๊ทธ ์—ญํ• ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.

// if...else ๋ฌธ ์‚ฌ์šฉ
let isAdult;
const age = 20;

if (age > 18) {
  isAdult = true;
} else {
  isAdult = false;
}
console.log(isAdult); // true

// ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ
const isAdultTernary = age > 18 ? true : false;
console.log(isAdultTernary); // true

์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์กŒ์ฃ ? ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ์ด๋ ‡๊ฒŒ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ ์•„์ฃผ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ผํ•ญ ์—ฐ์‚ฐ์ž์˜ ์žฅ์ 

  • ๊ฐ„๊ฒฐํ•จ: if...else ๋ธ”๋ก์„ ์—ฌ๋Ÿฌ ์ค„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ํ•œ ์ค„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ‘œํ˜„์‹: ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” 'ํ‘œํ˜„์‹โ€™์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜ ํ• ๋‹น ์™ธ์—๋„ ํ•จ์ˆ˜์˜ ์ธ์ž๋‚˜ ๋‹ค๋ฅธ ํ‘œํ˜„์‹ ๋‚ด๋ถ€์— ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์ฒฉ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ด์š”!

์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์—ฐ๊ฒฐํ•˜์—ฌ else if์™€ ๋น„์Šทํ•œ ๊ตฌ๋ฌธ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

const age = 15;

const message = age < 8 ? '์–ด๋ฆฐ์ด ์ž…๋‹ˆ๋‹ค' :
                age < 18 ? '์ฒญ์†Œ๋…„ ์ž…๋‹ˆ๋‹ค' :
                '์„ฑ์ธ ์ž…๋‹ˆ๋‹ค';

console.log(message); // '์ฒญ์†Œ๋…„ ์ž…๋‹ˆ๋‹ค'

๋‹ค๋งŒ, ์ค‘์ฒฉ์ด ๋„ˆ๋ฌด ๊นŠ์–ด์ง€๋ฉด ์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ 2~3๊ฐœ ์ •๋„์˜ ์กฐ๊ฑด์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์ƒ ๋ณต์žกํ•ด์ง€๋ฉด if...else if ๋ฌธ์ด๋‚˜ switch ๋ฌธ์ด ๋” ๋‚˜์€ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์–ด์š”.

2. ์˜ต์…”๋„ ์ฒด์ด๋‹ (Optional Chaining): ๊ฐ์ฒด?.์†์„ฑ

์˜ต์…”๋„ ์ฒด์ด๋‹(?.)์€ ES2020(ES11)์—์„œ ๋„์ž…๋œ ๋น„๊ต์  ์ตœ์‹  ๋ฌธ๋ฒ•์œผ๋กœ, ์‹ค๋ฌด์—์„œ ์ •๋ง ์‚ฌ๋ž‘๋ฐ›๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด๋‚˜ ๊ทธ ์ƒ์œ„ ์†์„ฑ์ด null ๋˜๋Š” undefined์ผ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋Œ€์‹  undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•„์™€ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค.

const user = {
  name: "์กฐ์ด",
  // profile ๊ฐ์ฒด๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์Œ
};

// ์˜ต์…”๋„ ์ฒด์ด๋‹์ด ์—†๋‹ค๋ฉด?
// const profileImage = user.profile.image; // TypeError: Cannot read properties of undefined (reading 'image')

์œ„ ์ฝ”๋“œ์—์„œ user ๊ฐ์ฒด์—๋Š” profile ์†์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— user.profile์€ undefined๊ฐ€ ๋˜๊ณ , undefined์—์„œ image ์†์„ฑ์„ ์ฐพ์œผ๋ ค ํ•˜๋‹ˆ TypeError๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์—๋Ÿฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฉˆ์ถ”๊ฒŒ ํ•  ์ˆ˜ ์žˆ์ฃ .

๊ณผ๊ฑฐ์—๋Š” ์ด๋Ÿฐ ์—๋Ÿฌ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด if ๋ฌธ์ด๋‚˜ && ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

// 1. if ๋ฌธ์œผ๋กœ ์ฒดํฌ
let profileImage;
if (user && user.profile) {
  profileImage = user.profile.image;
}

// 2. && ์—ฐ์‚ฐ์ž๋กœ ์ฒดํฌ
const profileImageAnd = user && user.profile && user.profile.image;

ํ•˜์ง€๋งŒ ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ฝ”๋“œ๊ฐ€ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค.

const user = {
  name: "์กฐ์ด",
};

const profileImage = user.profile?.image;
console.log(profileImage); // undefined (์—๋Ÿฌ ๋ฐœ์ƒ X)

user.profile์ด undefined์ด๋ฏ€๋กœ ?. ์—ฐ์‚ฐ์ž๋Š” ์ฆ‰์‹œ ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ  undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ์—†์ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ด์ฃ ! ๊ฐ์ฒด ์†์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด ์š”์†Œ(arr?.[index])๋‚˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ(func?.())์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํ™œ์šฉ๋„๊ฐ€ ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค.

3. ๋„๋ฆฌ์‰ฌ ์ฝœ๋ ˆ์‹ฑ (Nullish Coalescing): ๊ฐ’1 ?? ๊ฐ’2

๋„๋ฆฌ์‰ฌ ์ฝœ๋ ˆ์‹ฑ(??), ํ•œ๊ตญ์–ด๋กœ๋Š” 'null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์žโ€™๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ด ๋ฌธ๋ฒ•๋„ ์˜ต์…”๋„ ์ฒด์ด๋‹๊ณผ ํ•จ๊ป˜ ES2020์— ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์—ฐ์‚ฐ์ž๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ **null ๋˜๋Š” undefined**์ผ ๊ฒฝ์šฐ์—๋งŒ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์•„์ฃผ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๋Š”๋ฐ, ํ”ํžˆ ์‚ฌ์šฉ๋˜๋˜ ๋…ผ๋ฆฌ์  OR ์—ฐ์‚ฐ์ž(||)์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ด ์ค๋‹ˆ๋‹ค.

|| ์—ฐ์‚ฐ์ž์™€์˜ ์ฐจ์ด์ 

|| ์—ฐ์‚ฐ์ž๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ โ€˜falsyโ€™ ๊ฐ’์ผ ๋•Œ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ falsy ๊ฐ’์—๋Š” null, undefined๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 0, ""(๋นˆ ๋ฌธ์ž์—ด), false, NaN๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ๋ฌธ์— ์˜๋„์น˜ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๊ฐ’์ด 0์ด๋‚˜ ๋นˆ ๋ฌธ์ž์—ด์ธ๋ฐ ์ด๋ฅผ ์œ ํšจํ•œ ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ||๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

let height = 0;

console.log(height || 100); // 100
// height๊ฐ€ 0(falsy)์ด๋ฏ€๋กœ 100์ด ์ถœ๋ ฅ๋จ. ์˜๋„ํ•œ ๋™์ž‘์ด ์•„๋‹ ์ˆ˜ ์žˆ์Œ.

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋„๋ฆฌ์‰ฌ ์ฝœ๋ ˆ์‹ฑ(??)์ด ๋น›์„ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ??๋Š” ์˜ค์ง null๊ณผ undefined๋งŒ ์ฒดํฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

let height = 0;
let text = "";

console.log(height ?? 100); // 0 (height๋Š” null์ด๋‚˜ undefined๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ 0์„ ๋ฐ˜ํ™˜)
console.log(text ?? "๊ธฐ๋ณธ๊ฐ’"); // "" (text๋Š” null์ด๋‚˜ undefined๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜)

let missingValue = null;
console.log(missingValue ?? "๊ธฐ๋ณธ๊ฐ’"); // "๊ธฐ๋ณธ๊ฐ’"

์ด์ฒ˜๋Ÿผ ??๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 0์ด๋‚˜ "" ๊ฐ™์€ ์œ ํšจํ•œ ๊ฐ’์„ ์œ ์ง€ํ•˜๋ฉด์„œ null ๋˜๋Š” undefined์ผ ๋•Œ๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž ์กฐํ•ฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

?? ์—ฐ์‚ฐ์ž๋Š” ๋‹ค๋ฅธ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(&&, ||)์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๊ด„ํ˜ธ ์—†์ด๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ช…์„ธ์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// let x = 1 && 2 ?? 3; // SyntaxError ๋ฐœ์ƒ!

let x = (1 && 2) ?? 3; // ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•
console.log(x); // 2

์ •๋ฆฌํ•˜๋ฉฐ: ๋ฌผ์Œํ‘œ์™€ ์นœํ•ด์ง€๊ธฐ

์ง€๊ธˆ๊นŒ์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌผ์Œํ‘œ(?)๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๋ฌธ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  • ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (? :): if...else๋ฅผ ํ•œ ์ค„๋กœ ์ค„์—ฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ต์…”๋„ ์ฒด์ด๋‹ (?.): ๊ฐ์ฒด์˜ ์ค‘์ฒฉ๋œ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ null์ด๋‚˜ undefined๋กœ ์ธํ•œ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋„๋ฆฌ์‰ฌ ์ฝœ๋ ˆ์‹ฑ (??): ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ, 0์ด๋‚˜ ""๊ณผ ๊ฐ™์€ falsy ๊ฐ’์„ ์œ ํšจํ•œ ๊ฒƒ์œผ๋กœ ์ธ์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ์„ธ ๊ฐ€์ง€ ๋ฌธ๋ฒ•์€ ํ˜„๋Œ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์—์„œ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์กฐ๊ธˆ ๋‚ฏ์„ค ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ช‡ ๋ฒˆ๋งŒ ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ณด๋ฉด ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์ง€๊ณ  ๊ทธ ํŽธ๋ฆฌํ•จ์— ๋งค๋ฃŒ๋  ๊ฑฐ์˜ˆ์š”. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ์—์„œ ๋ณต์žกํ•œ if ๋ฌธ๊ณผ && ์ฒด์ธ์„ ์„ธ๋ จ๋œ ๋ฌผ์Œํ‘œ ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐ”๊ฟ”๋ณด์„ธ์š”!

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌผ์Œํ‘œ(?) ๋ฌธ๋ฒ• ์ด์ •๋ฆฌ: 3๊ฐ€์ง€ ์‚ฌ์šฉ๋ฒ• ์™„์ „ ์ •๋ณต | devdong