<aside> ๐Ÿ“Œ

</aside>

๐Ÿ“š nullish์™€ falsy๋ž€?

nullish

๊ด€๋ จ ์—ฐ์‚ฐ์ž

  1. Nullishing coalescing operator(??)

    ๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” unfined์ผ ๋•Œ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์ด๋‹ค.

    const ex1 = 1 ?? 0;          // 1
    const ex2 = null ?? 0;       // 0
    const ex2 = undefined ?? 0;  // 0
    
  2. optional chaing(?.)

    ?. ์—ฐ์‚ฐ์ž๋Š” . ์ฒด์ด๋‹ ์—ฐ์‚ฐ์ž์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์ฐธ์กฐ๊ฐ€ nullishํ•˜๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๋Œ€์‹ ์— ํ‘œํ˜„์‹์ด undefined๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์—์„œ ์‚ฌ์šฉ๋  ๋•Œ, ๋งŒ์•ฝ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด undefined๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

    const adventurer = {
      name: 'Alice',
      cat: {
        name: 'Dinah',
      },
    };
    
    const dogName = adventurer.dog?.name;
    console.log(dogName);
    // Expected output: undefined
    
    console.log(adventurer.someNonExistentMethod?.());
    // Expected output: undefined
    
  3. Non-null assertion(!)

    ์ ‘๋ฏธ์— ๋ถ™๋Š” !(๋‹จ์–ธ ์—ฐ์‚ฐ์ž)๋Š” ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ nullish(null ๋˜๋Š” undefined)ํ•˜์ง€ ์•Š์Œ์„ ๋‹จ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

    // Compiled with --strictNullChecks
    function validateEntity(e?: Entity) {
      // Throw exception if e is null or invalid entity
    }
    function processEntity(e?: Entity) {
      validateEntity(e);
      let s = e!.name; // e๊ฐ€ null์ด ์•„๋‹ˆ๊ณ  ํ™•์‹คํžˆ ์กด์žฌํ•œ๋‹ค๊ณ  ๋‹จ์–ธ
    }
    

    null์ด๋‚˜ undefined๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์— ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์กฐ์‹ฌํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฑธ ์“ฐ๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์ฒดํฌ ์ด์ ๋„ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์…ˆ์ด๋‹ˆ ์›ฌ๋งŒํ•˜๋ฉด ์“ฐ์ง€ ๋ง์ž.

falsy

๊ด€๋ จ ์—ฐ์‚ฐ์ž

  1. Logical OR(||)

    ๋…ผ๋ฆฌ์  OR๋Š” ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์ด ์ฐธ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฐธ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ boolean ๊ฐ’๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด ๊ฒฝ์šฐ์—๋Š” boolean ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ boolean์ด ์•„๋‹Œ ๊ฐ’๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด boolean์ด ์•„๋‹Œ ๊ฐ’์ด ๋ฐ˜ํ™˜๋œ๋‹ค.

    true || true; // t || t returns true
    false || true; // f || t returns true
    true || false; // t || f returns true
    false || 3 === 4; // f || f returns false
    "Cat" || "Dog"; // t || t returns "Cat"
    false || "Cat"; // f || t returns "Cat"
    "Cat" || false; // t || f returns "Cat"
    "" || false; // f || f returns false
    false || ""; // f || f returns ""
    false || varObject; // f || object returns varObject
    
  2. Double Bang(!!)

    !! ์—ฐ์‚ฐ์ž๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ boolean ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค. truthyํ•œ ๊ฐ’์€ true, falsyํ•œ ๊ฐ’์€ false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

    !!true  // returns true
    !!false  // returns false
    

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ