2. ๊ฐ’

๊ฐ’

์ž๋ฐ”์Šคํฌ๋ฆฝ์—์„œ ๊ฐ’์€ ์ค‘์š”ํ•œ ์š”์†Œ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์ด์œ ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์„ ๊ฐ’์œผ๋กœ ์ถ”๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๊ณ  ์ด๊ฒƒ์— ๋”ฐ๋ผ ๋งŽ์€ ๋ฌธ๋ฒ•์ด ํŒŒ์ƒ์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ๊ฐ’๊ณผ ํƒ€์ž…์ด ์–ด๋–ค์‹์œผ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ฐ’ ์“ฐ์ž„

  • ๋ฐฐ์—ด

    • ๊ธฐ๋ณธ์ ์ธ ์“ฐ์ž„์€ ํƒ€ ๋žญ๊ท€์ง€์™€ ๋™์ผ

    • ํฌ๊ธฐ ์ง€์ •์—†์ด ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ž๋™ ๋Š˜์–ด๋‚จ

    • delete ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์‚ญ์ œ ๊ฐ€๋Šฅ

      -> ๋ฐ์ดํ„ฐ ๋น„๊ฒŒ๋จ. ๊ธธ์ด๋Š” ๊ทธ๋Œ€๋กœ ์ธ๊ฑธ๋กœ ๋ด์„œ๋Š” ๊ณต๊ฐ„์€ ์ฐจ์ง€ํ•˜๋Š”๊ฒƒ ๊ฐ™์Œ

    • ํ• ๋‹น ์•ˆ๋œ ์ค‘๊ฐ„์˜ ๋ถ€๋ถ„์€ undefined

  • ๋ฌธ์ž์—ด

    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์›์‹œํƒ€์ž…์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผ

    • ์œ ์‚ฌ๋ฐฐ์—ด : ๋ฐฐ์—ด์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฐฐ์—ด๊ฐ™์ด ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ

  • ์ˆซ์ž

    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ˆ˜, ์‹ค์ˆ˜ ๊ตฌ๋ถ„์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    • ์ˆซ์ž๊ฐ€ ์ปค์ง€๋ฉด ์ง€์ˆ˜๋ฒ•์น™์ธ๊ฐ€? ์ ์šฉ e๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฑฐ

    • ์†Œ์ˆซ์  0 ์ƒ๋žต

    • ๊ฐ€๊นŒ์šด์ˆ˜ ๋ฐ˜์˜ฌ๋ฆผ

    • ์ง„๋ฒ• ํ‘œ๊ธฐ : 0x, 0o, 0b ์ฒ˜๋Ÿผ ์†Œ๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋Š” ์Šต๊ด€๋“ค์ด๊ธฐ

  • null

    • ๋นˆ๊ฐ’

    • ๊ฐ’์ด ์žˆ์—ˆ์ง€๋งŒ ํ˜„์žฌ ๊ฐ’์ด ์—†๋Š” ์ƒํƒœ

  • undefined

    • ํ• ๋‹น์•ˆ๋œ ๊ฐ’

    • ์•„์— ํ• ๋‹น์กฐ์ฐจ ์•ˆ๋œ ์ƒํƒœ

  • ๊ฐ’ vs ๋ ˆํผ๋Ÿฐ์Šค

    • ํฌ์ธํ„ฐ๋ž€ ๊ฐœ๋…์ด ์—†์Œ

    • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”์™€ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋  ๋“ฏ

    • ๊ฐ’ / ๊ฐ์ฒด ๊ด€๋ จ

์ฃผ์š” ๊ฐœ๋… ๋ฐ ๋‚ด์šฉ

๋ฐฐ์—ด, ๋ฌธ์ž์—ด, ์ˆซ์ž ์˜ ์‚ฌ์šฉ์ด ์ค‘์š” undefined, null

  • ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐœ๋…

    • ๋Œ€ํ‘œ์ ์ธ DOM ์›์†Œ ๋ฆฌ์ŠคํŠธ

์ฃผ์˜ ์‚ฌํ•ญ

  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค์— ์ผ๋ฐ˜๋ฌธ์ž์—ด -> ํ”„๋กœํผํ‹ฐ๋กœ ์„ค์ •๋จ

      var a = [];
      a[0] = 1;
      a["foobar"] = 2;    // ํ”„๋กœํผํ‹ฐ๋กœ ๋“ค์–ด๊ฐ
      console.log(a);     // [ 1, foobar: 2 ]
      console.log(a.length);  // 1
      console.log(a.foobar);  // 2
      console.log(a[1]);      // undefined
  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฌธ์ž์—ด์ˆซ์ž -> ์ธ๋ฑ์Šค๋กœ ์ธ์‹

      var b = [];
      b["13"] = 42;           // b[13] = 42์™€ ๋™์ผ : 0~12 undefined ๋กœ ์„ค์ •
      console.log(b);         // [ <13 empty items>, 42 ]
      console.log(b.length);  // 14
  • ์ˆซ์ž ๋ง์…ˆ ๋บ„์…ˆ

      // ์ •ํ™•ํ•œ ๊ฐ’์ด ์•ˆ๋‚˜์˜ด
      var a = 0.1;
      var b = 0.2;
      console.log(a + b) // 0.3 ? 0.300000000004 : ์˜ค์ฐจ๋ฐœ์ƒ
  • NaN ๋น„๊ต

      var a = 2 / "foo";    // NaN
      console.log(a == NaN);
      console.log(a == NaN);  // false
      console.log(a === NaN); // false  ๊ฐœ์†Œ๋ฆ„..?
    
      console.log(isNaN(a));  // true
      console.log(isNaN("foo"));          // true   : ์ˆซ์ž๋งŒ ์ฒดํฌํ•˜๋Š” ๊ฐœ๋…์ด ์•„๋‹˜.. ๋ฒ„๊ทธ์„ฑ ๋น„์ง๊ด€์ 
      console.log(Number.isNaN("foo"));;  // false  : es6 NaN๋งŒ ์ฒดํฌ
  • -0, +0, +-Infinity

      var a = 0 / -3;
      var b = 0 / 3;
      console.log(a); // -0
      console.log(b); // 0
      console.log(a == b); // true
    
      console.log(a.toString());      // 0
      console.log(String(a));         // 0
      console.log(JSON.stringify(a)); // 0
    
      console.log(+"-0");             // -0
      console.log(Number("-0"));      // -0
      console.log(JSON.parse("-0"));  // -0
    
      // -0 ์ฒดํฌ๋Š” ์ด๋Ÿฐ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•จ
      function isNegZero(n) {
          n = Number(n);
          return n === 0 && (1/n === -Infinity);
      }
    
      console.log(isNegZero(-0));
      console.log(isNegZero(0 / -3));
      console.log(isNegZero(-0 * 11));
      console.log(isNegZero(0));

๊ทธ์™ธ ๋น ํŠธ๋ฆฐ ๋ถ€๋ถ„ ์ •๋ฆฌ

  • ์ •์ˆ˜ ์ •ํ™•ํ•œ ํ‘œํ˜„

    • isSafeInteger() / isInteger()

  • void ์—ฐ์‚ฐ์ž

    • ์–ด๋–ค ๊ฐ’์ด๋“  ๋ฌดํšจ๋กœ ๋งŒ๋“ฌ : undefined

  • NaN

    • ์œ ํšจํ•˜์ง€ ์•Š์€ ์ˆซ์ž / ์‹คํŒจํ•œ ์ˆซ์ž / ๋ชน์“ธ ๋…€์„

    • NaN์ฒดํฌ๋Š” es6(Number.isNaN ์œผ๋กœ ์ฒดํฌํ•ด์•ผํ•จ)

  • -0, +0 ๊ฐœ๋…

    • ๋ฒกํ„ฐ๋ผ๋ด์•ผํ•œ๋‹ค. ์ฆ‰ ํ”Œ๋งˆ๋Š” ๋ฐฉํ–ฅ์„ฑ์„ ๋‚˜ํƒ€๋ƒ„. ํ™”๋ฉด์— ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ ํ‘œํ˜„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ?

  • Obejct.is()

    • ๋‘๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ฉ”์„œ๋“œ

      ```javascript

      var a = 2 / "foo"; // NaN

      var b = -3 * 0; // -0

    console.log(Object.is(a, NaN)); // true console.log(Object.is(b, -0)); // true console.log(Object.is(b, 0)); // false

    ```

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

(function () {
    var a = [];
    a[0] = 2;
    a[2] = 3;   //  a[1] = ? -> undefined
    console.log(a);
    console.log(a.length);  // 3
    delete a[0];            // undefined : ๊ณต๊ฐ„์€ ์ฐจ์ง€
    console.log(a);
    console.log(a.length);  // 3

    console.log(typeof a[0]);
    console.log(typeof a[1]);
    console.log(typeof a[2]);

    console.log("==========");

    var a = [];
    a[0] = 1;
    a["foobar"] = 2;    // ํ”„๋กœํผํ‹ฐ๋กœ ๋“ค์–ด๊ฐ
    console.log(a);     // [ 1, foobar: 2 ]
    console.log(a.length);  // 1
    console.log(a.foobar);  // 2
    console.log(a[1]);      // undefined

    var b = [];
    b["13"] = 42;           // b[13] = 42์™€ ๋™์ผ : 0~12 undefined ๋กœ ์„ค์ •
    console.log(b);         // [ <13 empty items>, 42 ]
    console.log(b.length);  // 14

    console.log("===== ๋ฐฐ์—ด =====");
    var a = "foo";
    var b = ["f", "o", "o"];
    console.log(a.length);
    console.log(b.length);
    console.log(a.indexOf("o"));
    console.log(b.indexOf("o"));

    var c = a.toUpperCase();
    console.log(c);
    console.log(a === c);

    b.push("!");
    console.log(b);

    var c = Array.prototype.join.call(a, "-");
    console.log(c);
    var d = Array.prototype.map.call(a, function (v) {
        return v.toUpperCase() + ".";
    }).join("");
    console.log(d);
    console.log(a.split("").reverse().join(""));

    console.log("===== ์ˆซ์ž ======");
    var a = 0.2;
    var b = 0.3;
    console.log(b - a);   // ์ •ํ™•ํ•œ 0.1 ์•ˆ๋‚˜์˜ด
    console.log(b + a);   // ์ •ํ™•ํ•œ 0.1 ์•ˆ๋‚˜์˜ด

    console.log(Number.isInteger(42));
    console.log(Number.isInteger(42.00));
    console.log(Number.isSafeInteger(42.00));


    console.log("===== void ์—ฐ์‚ฐ์ž =====");
    var a = 42;
    console.log(void a, a); // a์—๋Š” ์˜ํ–ฅ์„ ์•ˆ๋ฏธ์นจ

    console.log("======= NaN =========");
    var a = 2 / "foo"; // NaN
    console.log(a);
    console.log(typeof a);
    console.log(NaN);
    console.log(typeof NaN);

    console.log(a == NaN);  // false
    console.log(a === NaN); // false  ๊ฐœ์†Œ๋ฆ„..?

    console.log(isNaN(a));  // true
    console.log(isNaN("foo"));          // true
    console.log(Number.isNaN("foo"));;  // false

    console.log("======= -0, +0 =========");
    var a = 0 / -3;
    var b = 0 / 3;
    console.log(a); // -0
    console.log(b); // 0
    console.log(a == b); // true

    console.log(a.toString());      // 0
    console.log(String(a));         // 0
    console.log(JSON.stringify(a)); // 0

    console.log(+"-0");
    console.log(Number("-0"));
    console.log(JSON.parse("-0"));

    function isNegZero(n) {
        n = Number(n);
        return n === 0 && (1/n === -Infinity);
    }

    console.log(isNegZero(-0));
    console.log(isNegZero(0 / -3));
    console.log(isNegZero(-0 * 11));
    console.log(isNegZero(0));

    console.log("======= Object.is() ========");

    var a = 2 / "foo";    // NaN
    var b = -3 * 0;       // -0
    console.log(Object.is(a, NaN));         // true
    console.log(Object.is(b, -0));   // true
    console.log(Object.is(b, 0));    // false


    var a = [1, 2, 3];
    function testArr(x) {
        x.push(4);

        x.length = 0;
        x.push(4, 5, 6, 7);
    }

    testArr(a);
    console.log(a);
    console.log(a.slice());


})();

Last updated