[TECH-QA] ?? (Nullish Coalescing Operator)์™€ !! (์ด์ค‘ ๋ถ€์ • ์—ฐ์‚ฐ์ž)

!! (์ด์ค‘ ๋ถ€์ • ์—ฐ์‚ฐ์ž)

  • ๊ฐ’์„ ๋ถˆ๋ฆฌ์–ธ(Boolean) ํƒ€์ž…(true ๋˜๋Š” false)์œผ๋กœ ๊ฐ•์ œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • falsy ๊ฐ’ (false, 0, "", null, undefined, NaN)์€ false๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค,
  • truthy ๊ฐ’ (falsy ๊ฐ’ ์™ธ)์€ true๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
console.log(!!0);         // false
console.log(!!"");        // false
console.log(!!null);      // false
console.log(!!"netflix"); // true
console.log(!!1);         // true

?? (Nullish Coalescing Operator)

  • ๋‘ ๊ฐ’ ์ค‘ "nullish" null ๋˜๋Š” undefined๋งŒ ์ฒดํฌํ•˜๋ฉฐ null๊ณผ undefined๊ฐ€ ์•„๋‹Œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • a ?? b ๋Š” a๊ฐ€ null ๋˜๋Š” undefined๊ฐ€ ์•„๋‹ˆ๋ฉด a๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด b๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ?? ๋Š” null๊ณผ undefined๋งŒ ์ฒดํฌํ•˜๋ฉฐ, ๋‹ค๋ฅธ falsy ๊ฐ’(false, 0, "", NaN)์€ nullish๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 0์€ nullish ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ, 0 ?? b๋Š” ํ•ญ์ƒ 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค (b๋Š” ๋ฌด์‹œ๋จ).
console.log(0 ?? "default");     // 0 (0์€ nullish๊ฐ€ ์•„๋‹˜)
console.log(null ?? "default");  // "default" (null์€ nullish)
console.log(undefined ?? "default"); // "default" (undefined๋Š” nullish)
console.log("" ?? "default");    // "" (๋นˆ ๋ฌธ์ž์—ด์€ nullish๊ฐ€ ์•„๋‹˜)
console.log(false ?? "default"); // false (false๋Š” nullish๊ฐ€ ์•„๋‹˜)

?? (Nullish Coalescing Operator)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‘ ๋ฒˆ์งธ ๊ฐ’๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
console.log(null ?? undefined); // undefined
console.log(undefined ?? null); // null