๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ Chapter 2 : ๊ฐ’

Table of Contents
  • ๋ฐฐ์—ด ๐Ÿ”—
    • ์œ ์‚ฌ ๋ฐฐ์—ด ๐Ÿ”—
  • ๋ฌธ์ž์—ด ๐Ÿ”—
  • ์ˆซ์ž ๐Ÿ”—
    • ์ˆซ์ž ๊ตฌ๋ฌธ ๐Ÿ”—
    • ์ž‘์€ ์†Œ์ˆ˜ ๊ฐ’ ๐Ÿ”—
    • ์ •์ˆ˜์ธ์ง€ ํ™•์ธ ๐Ÿ”—
    • 32๋น„ํŠธ (๋ถ€ํ˜ธ ์žˆ๋Š”) ์ •์ˆ˜ ๐Ÿ”—
  • ํŠน์ˆ˜ ๊ฐ’ ๐Ÿ”—
    • ๊ฐ’์ด ์•„๋‹Œ ๊ฐ’ ๐Ÿ”—
    • Undefined ๐Ÿ”—
    • ํŠน์ˆ˜ ์ˆซ์ž ๐Ÿ”—
    • ํŠน์ดํ•œ ๋™๋“ฑ ๋น„๊ต ๐Ÿ”—
  • ๊ฐ’ vs ๋ ˆํผ๋Ÿฐ์Šค ๐Ÿ”—
  • ์ •๋ฆฌํ•˜๊ธฐ ๐Ÿ”—

๐ŸŽฏ ๋ฐฐ์—ดโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์€ ํƒ€์ž…์ด ์—„๊ฒฉํ•œ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๊ฐ์ฒด ์‹ฌ์ง€์–ด ๋‹ค๋ฅธ ๋ฐฐ์—ด์ด๋‚˜ ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ’์ด๋ผ๋„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฆ‡์ด๋‹ค.
var a = [1, "2", [3]];

a.length; // 3
a[0] === 1; // true
a[2][0] === 3; // true
  • ๋ฐฐ์—ด ํฌ๊ธฐ๋Š” ๋ฏธ๋ฆฌ ์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
var a = [];

a.length; // 0
a[0] = 1;
a[1] = "2";
a[2] = [3];
a.length; // 3
  • ๋นˆ ์Šฌ๋กฏ์ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋–„๋Š” ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.
var a = [];

a[0] = 1;
// a[1]์ด ๋น ์ง
a[2] = [3];
a.length; // 3
  • ์‹คํ–‰์€ ๋˜์ง€๋งŒ ์ด๋Ÿฐ ์ฝ”๋“œ์—์„œ ์ค‘๊ฐ„์— ๊ฑด๋„ˆ๋›ด ๋นˆ ์Šฌ๋กฏ์€ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์œ„ ์˜ˆ์ œ์—์„œ a[1]์Šฌ๋กฏ ๊ฐ’์€ undefinded๊ฐ€ ๋  ๊ฑฐ ๊ฐ™์ง€๋งŒ, ๋ช…์‹œ์ ์œผ๋กœ a[1] = undefined๋ผ ์„ธํŒ…ํ•œ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ง€๋Š” ์•Š๋‹ค.
  • ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋Š” ์ˆซ์ž์ธ๋ฐ, ๋ฐฐ์—ด ์ž์ฒด๋„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—ฌ์„œ ํ‚ค/ํ”„๋กœํผํ‹ฐ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฐฐ์—ด length๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.)
var a = [];
a[0] = 1;
a["foobar"] = 2;

a.length; // 1
a["foobar"] // 2
a.foobar; // 2
  • ํ‚ค๋กœ ๋„ฃ์€ ๋ฌธ์ž์—ด ๊ฐ’์ด ํ‘œ์ค€ 10์ง„์ˆ˜ ์ˆซ์ž๋กœ ํƒ€์ž…์ด ๋ฐ”๋€Œ๋ฉด, ๋งˆ์น˜ ๋ฌธ์ž์—ด ํ‚ค๊ฐ€ ์•„๋‹Œ ์ˆซ์ž ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ๊ฑฐ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ดˆ๋ž˜๋œ๋‹ค.
var a = [];

a["13"] = 42;
a.length; // 14

๐Ÿ“š ์œ ์‚ฌ ๋ฐฐ์—ดโ€‹

  • ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ’(์ˆซ์ž ์ธ๋ฑ์Šค๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ)์„ ์ง„์งœ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค.
  • ์ด๋Ÿด ๋•Œ๋Š” ๋ฐฐ์—ด ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜(indexOf(), forEach(), concat() ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.
function foo() {
// arguments ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ES6๋ถ€ํ„ฐ ๋น„ ๊ถŒ์žฅ
var arr = Array.prototype.slice.call(arguments);
arr.push("bam");
console.log(arr);
}

foo("bar", "baz"); // ["bar", "baz", "bam"]
  • ์œ„์™€ ๊ฐ™์€ ๋ณ€ํ™˜์€ slice() ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์„ ์ฐจ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ES6 ๋ถ€ํ„ฐ๋Š” ๊ธฐ๋ณธ ๋‚ด์žฅ ํ•จ์ˆ˜ Array.from()์ด ์ด ์ผ์„ ๋Œ€์‹ ํ•œ๋‹ค.
var arr = Array.from(arguments);

๐ŸŽฏ ๋ฌธ์ž์—ดโ€‹

  • ํ”ํžˆ ๋ฌธ์ž์—ด์€ ๋‹จ์ง€ ๋ฌธ์ž์˜ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด์€ ์‹ค์ œ๋กœ ์ƒ๊น€์ƒˆ๋งŒ ๋น„์Šทํ•  ๋ฟ ๋ฌธ์ž ๋ฐฐ์—ด๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค.
var a = 'foo';
var b = ['f', 'o', 'o'];
  • ๋ฌธ์ž์—ด์€ ๋ฐฐ์—ด๊ณผ ๊ฒ‰๋ชจ์Šต์ด ๋‹ฎ์•˜๋‹ค.(์œ ์‚ฌ ๋ฐฐ์—ด์ด๋‹ค.).
  • ๋‘˜ ๋‹ค length ํ”„๋กœํผํ‹ฐ, indexOf() ๋ฉ”์„œ๋“œ(ES5 ๋ฐฐ์—ด์—๋งŒ ์žˆ์Œ), concat() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค
a.length; // 3
b.length; // 3

a.indexOf('o'); // 1
b.indexOf('o'); // 1

var c = a.concat('bar'); // foobar
var d = b.concat(['b', 'a', 'r']); // ['f', 'o', 'o', 'b', 'a', 'r']

a === c; // false
b === d; // false

a; // foo
b; // ['f', 'o', 'o']
  • ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋‘˜ ๋‹ค '๋ฌธ์ž์˜ ๋ฐฐ์—ด'์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
a[i] = '0';
b[i] = '0';

a; // foo
b; // ['f', 'O', 'o']
  • ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’(Immutable) ์ด์ง€๋งŒ ๋ฐฐ์—ด์€ ๊ฐ€๋ณ€ ๊ฐ’(Mutable) ์ด๋‹ค.
  • a[1] ์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด์˜ ํŠน์ • ๋ฌธ์ž๋ฅผ ์ ‘๊ทผํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์œ ํšจํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. (์ต์Šคํ”Œ๋กœ๋Ÿฌ ๊ตฌ๋ฒ„์ „์€ ๋ฌธ๋ฒ• ์—๋Ÿฌ๋กœ ์ธ์‹)
  • ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’์ด๋ฏ€๋กœ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋Š” ๊ทธ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฐ˜๋ฉด์— ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋Š” ๊ทธ ์ž๋ฆฌ์—์„œ ๊ณง๋ฐ”๋กœ ์›์†Œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
c = a.toUpperCase();
a === c; //false
a; // foo
c; // FOO

b.push('!');
b; // ['f','O', 'o', '!']
  • ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์‹ค์ƒ ๋ฌธ์ž์—ด์— ์“ธ ์ˆ˜ ์—†์ง€๋งŒ, ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋ถˆ๋ณ€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๋นŒ๋ ค ์“ธ ์ˆ˜๋Š” ์žˆ๋‹ค.
a.join; // undefined
a.map; // undefined

var c = Array.prototype.join.call(a, '-');
var d = Array.prototype.map.call(a, function(v) {
return v.toUpperCase() + '.';
}).join('');

c; // "f-o-o"
d; // "F.O.O."
  • ๋ฌธ์ž์—ด์˜ ์ˆœ์„œ๋กœ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฐ์—ด์—๋Š” reverse() ๋ผ๋Š” ๊ฐ€๋ณ€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์ง€๋งŒ, ๋ฌธ์ž์—ด์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
a.reverse; // undefined

b.reverse(); // ["!", "o", "o", "f"]
b; // ["!", "o", "o", "f"]
  • ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’์ด๋ผ ๋ฐ”๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ๊ฐ€๋ณ€ ๋ฉ”์„œ๋“œ๋Š” ํ†ตํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ž˜์„œ '๋นŒ๋ ค ์“ฐ๋Š” ๊ฒƒ' ๋˜ํ•œ ์•ˆ ๋œ๋‹ค.
Array.prototype.reverse.call(a);
// Cannot assign to read only property '0' of object '[object String]'
  • ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๊ณ  ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋‹ค์‹œ ๋ฌธ์ž์—ด๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ๋˜ ๋‹ค๋ฅธ ๊ผผ์ˆ˜(Hack)์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ณต์žกํ•œ(์œ ๋‹ˆ์ฝ”๋“œ)๋ฌธ์ž๊ฐ€ ์„ž์—ฌ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋ฐฉ๋ฒ•์€ ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค.
var c = a.split('').reverse().join('');

๐ŸŽฏ ์ˆซ์žโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ˆซ์ž ํƒ€์ž…์€ number๊ฐ€ ์œ ์ผํ•˜๋ฉฐ ์ •์ˆ˜(integer), ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ์•„์šฐ๋ฅธ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ •์ˆ˜๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์  ๊ฐ’์ด ์—†๋Š” ๊ฐ’์ด๋‹ค.(42.0์€ ์ •์ˆ˜ 42์™€ ๊ฐ™๋‹ค.)

๐Ÿ“š ์ˆซ์ž ๊ตฌ๋ฌธโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 10์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œ์‹œํ•œ๋‹ค.
  • ์†Œ์ˆ˜์  ์•ž ์ •์ˆ˜๊ฐ€ 0์ด๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์†Œ์ˆ˜์  ์ดํ•˜๊ฐ€ 0์ผ ๋•Œ๋„ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.
var a = 42;
var b = 42.3;

var a = 0.42;
var b = .42;

var a = 42.0;
var b = 42.;
  • ์•„์ฃผ ํฌ๊ฑฐ๋‚˜ ์•„์ฃผ ์ž‘์€ ์ˆซ์ž๋Š” ์ง€์ˆ˜ํ˜•์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ, toExponential() ๋ฉ”์„œ๋“œ์˜ ๊ฒฐ๊ด๊ฐ’๊ณผ ๊ฐ™๋‹ค.
var a = 5E10;
a; // 50000000000
a.toExponential() // "5e+10"
  • ์ˆซ์ž ๊ฐ’์€ Number ๊ฐ์ฒด ๋ž˜ํผ(Wrapper)๋กœ ๋ฐ•์‹ฑ(Boxing)ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Number.prototype ๋ฉ”์„œ๋“œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
var a = 42.59;

a.toFixed(0); // "43"
a.toFixed(1); // "42.6"
a.toFixed(2); // "42.59"
  • ์‹ค์ œ๋กœ๋Š” ์ˆซ์ž ๊ฐ’์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์›๋ž˜ ๊ฐ’์˜ ์†Œ์ˆ˜์  ์ดํ•˜ ์ˆซ์ž๋ณด๋‹ค ๋” ๋งŽ์€ ์ž๋ฆฟ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ทธ๋งŒํผ 0์ด ์šฐ์ธก์— ๋ถ™๋Š”๋‹ค.
  • ์†Œ์ˆ˜์ ์ผ ๊ฒฝ์šฐ์—” ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ์ž๊ฐ€ ์•„๋‹Œ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์˜ ์ผ๋ถ€๋กœ ํ•ด์„๋˜๋ฏ€๋กœ, ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋–„๋Š” ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.
42.toFixed(3); // Uncaught SyntaxError: Invalid or unexpected token

(42).toFixed(3); // "42.000"
0.42.toFixed(3); // "0.420"
42..toFixed(3); // "42.000"
  • 42.toFixed(3);๊ฐ€ ๊ตฌ๋ฌธ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ์ด์œ ๋Š” 42. ๋ฆฌํ„ฐ๋Ÿด(๋งž๋Š” ํ‘œํ˜„)์˜ ์ผ๋ถ€๊ฐ€ ๋˜์–ด ๋ฒ„๋ ค .toFixed ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜๋‹จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์€ 2์ง„, 8์ง„, 16์ง„ ๋“ฑ ๋‹ค๋ฅธ ์ง„๋ฒ•์œผ๋กœ๋„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ES6+ ์—„๊ฒฉ ๋ชจ๋“œ(strict mode)์—์„œ๋Š” 0363์ฒ˜๋Ÿผ 0์„ ์•ž์— ๋ถ™์—ฌ 8์ง„์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜์ง€ ๋ชปํ•œ๋‹ค.

๐Ÿ“š ์ž‘์€ ์†Œ์ˆ˜ ๊ฐ’โ€‹

  • ๋‹ค์Œ ์˜ˆ์ œ๋Š” ์ด์ง„ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž์˜ ๋ถ€์ž‘์šฉ ๋ฌธ์ œ์ด๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋งŒ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ IEEE 754 ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ์–ธ์–ด์—์„œ ๊ณตํ†ต์ ์ธ ๋ฌธ์ œ์ด๋‹ค.
0.1 + 0.2 === 0.3 // false
  • ์ด ๋ฌธ์ œ๋Š” ์ด์ง„ ๋ถ€๋™ ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ 0.1๊ณผ 0.2๋Š” ์›๋ž˜ ์ˆซ์ž์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ทธ๋ž˜์„œ ๋‘˜์„ ๋”ํ•œ ๊ฒฐ๊ณผ ์—ญ์‹œ ์ •ํ™•ํ•œ 0.3์ด ์•„๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” 0.300000000004์— ๊ฐ€๊น์ง€๋งŒ, ๊ฐ€๊น๋‹ค๊ณ ํ•ด๋„ ๊ฐ™์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด(๋Œ€๋ถ€๋ถ„) ์ „์ฒด์ˆ˜(0๊ณผ ์–‘์ˆ˜๋ฅผ ํฌํ•จํ•œ ์ˆซ์ž)๋งŒ์„, ๊ทธ๊ฒƒ๋„ ๊ธฐ๊ปํ•ด์•ผ ๋ฐฑ๋งŒ์ด๋‚˜ ์กฐ ๋‹จ์œ„ ๊ทœ๋ชจ์˜ ์ˆซ์ž๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
  • ์ด๋Ÿฐ ์ƒํ™ฉ์ด๋ผ๋ฉด ์•ˆ์‹ฌํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ˆซ์ž ์—ฐ์‚ฐ ๊ธฐ๋Šฅ์„ ๋ฏฟ๊ณ  ์จ๋„ ๋œ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด 0.1 + 0.2 ๊ณผ 0.3, ๋‘ ์ˆซ์ž๋Š” ๋ฏธ์„ธํ•œ ๋ฐ˜์˜ฌ๋ฆผ ์˜ค์ฐจ๋ฅผ ํ—ˆ์šฉ ๊ณต์ฐจ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋ฏธ์„ธํ•œ ์˜ค์ฐจ๋ฅผ ๋จธ์‹  ์ž…์‹ค๋ก (์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž ๋‹จ์œ„) ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆซ์ž์˜ ๋จธ์‹  ์ž…์‹ค๋ก ์€ 2^-52^์ด๋‹ค.
  • ES6๋ถ€ํ„ฐ๋Š” ์ด ๊ฐ’์ด Number.EPSILON์œผ๋กœ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•„์š”์‹œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ณ , ES6 ์ด์ „ ๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ฆฌํ•„์„ ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.
if(!Number.EPSILON) {
Number.EPSILON = Math.pow(2,-52);
}
  • Number.EPSILON์œผ๋กœ ๋‘ ์ˆซ์ž์˜ (๋ฐ˜์˜ฌ๋ฆผ ํ—ˆ์šฉ ์˜ค์ฐจ ์ด๋‚ด์˜) ๋™๋“ฑํ•จ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.
function numbersCloseEnoughToEqual(n1, n2) {
return Math.abs(n1 - n2) < Number.EPSILON;
}

var a = 0.1 + 0.2;
var b = 0.3;

numbersCloseEnoughToEqual(a, b); // true
numbersCloseEnoughToEqual(0.00000001, 0.00000002); // false

๐Ÿ“š ์ •์ˆ˜์ธ์ง€ ํ™•์ธโ€‹

  • ES6๋ถ€ํ„ฐ๋Š” Number.isInteger()๋กœ ์–ด๋–ค ๊ฐ’์˜ ์ •์ˆ˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค.
Number.isInteger(42); // true
Number.isInteger(42.000); // true
Number.isInteger(42.3); // false
  • ์•ˆ์ „ํ•œ ์ •์ˆ˜ ์—ฌ๋ถ€๋Š” ES6๋ถ€ํ„ฐ Number.isSafeInteger()๋กœ ์ฒดํฌํ•œ๋‹ค.
Number.isSafeInteger(Number.MAX_SAFE_INTEGER); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true

๐Ÿ“š 32๋น„ํŠธ (๋ถ€ํ˜ธ ์žˆ๋Š”) ์ •์ˆ˜โ€‹

  • ์ •์ˆ˜์˜ ์•ˆ์ „ ๋ฒ”์œ„๊ฐ€ ๋Œ€๋žต 9์กฐ์— ์ด๋ฅด์ง€๋งŒ, 32๋น„ํŠธ ์ˆซ์ž์—๋งŒ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์ด ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ ๋ฒ”์œ„๋Š” ํ›จ์”ฌ ์ค„์–ด๋“ ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ •์ˆ˜์˜ ์•ˆ์ „ ๋ฒ”์œ„๋Š” Math.pow(-2, 31)์—์„œ Math.pow(2, 31) - 1 ๊นŒ์ง€์ด๋‹ค.
  • a | 0 ๊ณผ ๊ฐ™์ด ์“ฐ๋ฉด ์ˆซ์ž ๊ฐ’ โžก 32 ๋น„ํŠธ ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜๋กœ ๊ฐ•์ œ๋ณ€ํ™˜์„ ํ•œ๋‹ค.
  • | ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋Š” 32๋น„ํŠธ ์ •์ˆ˜ ๊ฐ’์—๋งŒ ์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

๐ŸŽฏ ํŠน์ˆ˜ ๊ฐ’โ€‹

๐Ÿ“š ๊ฐ’์ด ์•„๋‹Œ ๊ฐ’โ€‹

  • undefinded ํƒ€์ž…์˜ ๊ฐ’์€ undefinded ๋ฐ–์— ์—†๋‹ค. null ํƒ€์ž…๋„ ๊ฐ’์€ null๋ฟ์ด๋‹ค.
  • ๊ทธ๋ž˜์„œ ์ด ๋‘˜์€ ํƒ€์ž…๊ณผ ๊ฐ’์ด ํ•ญ์ƒ ๊ฐ™๋‹ค.
  • null์€ ์‹๋ณ„์ž๊ฐ€ ์•„๋‹Œ ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ์ด๋ฏ€๋กœ null์ด๋ผ์€ ๋ณ€์ˆ˜์— ๋ญ”๊ฐ€ ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  • ๊ทธ๋ ‡์ง€๋งŒ undefined๋Š” ์‹๋ณ„์ž๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“š Undefinedโ€‹

  • ๋Š์Šจํ•œ ๋ชจ๋“œ์—์„œ๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„์—์„œ undefined๋ž€ ์‹๋ณ„์ž์— ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.(์ ˆ๋Œ€ ์ถ”์ฒœ X)
function foo() {
undefined = 2; // ์ข‹์ง€ ๋ชปํ•˜๋‹ค.
}

function foo() {
"use strict";
undefined = 2; // ํƒ€์ž… ์—๋Ÿฌ ๋ฐœ์ƒ
}
  • ๋ชจ๋“œ์— ์ƒ๊ด€์—†์ด undefined๋ž€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. (์‚ฌ์šฉ X)
function foo() {
"use strict";
var undefined = 2;
console.log(undefined); // 2
}
  • undefined๋Š” ๋‚ด์žฅ ์‹๋ณ„์ž๋กœ, ๊ฐ’์€ undefined์ง€๋งŒ, ์ด ๊ฐ’์€ void ์—ฐ์‚ฐ์ž๋กœ๋„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ‘œํ˜„์‹ void __๋Š” ์–ด๋–ค ๊ฐ’์ด๋“  ๋ฌดํšจ๋กœ ๋งŒ๋“ค์–ด, ํ•ญ์ƒ ๊ฒฐ๊ด๊ฐ’์„ undefined๋กœ ๋งŒ๋“ ๋‹ค. ๊ธฐ์กด ๊ฐ’์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ ํ›„ ๊ฐ’์€ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋‹ค.
var a = 42;
console.log(void a, a); // undefined 42
  • ๊ด€๋ก€์— ๋”ฐ๋ผ void๋งŒ์œผ๋กœ undefined ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด void 0์ด๋ผ๊ณ  ์“ด๋‹ค. void 0, void 1, undefined ๋ชจ๋‘ ๊ฐ™๋‹ค.
  • void ์—ฐ์‚ฐ์ž๋Š” ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ณณ์—์„œ ๊ทธ ๊ฐ’์ด undefined๊ฐ€ ๋˜์–ด์•ผ ์ข‹์„ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

๐Ÿ“š ํŠน์ˆ˜ ์ˆซ์žโ€‹

  • ์ˆซ์ž ์—ฐ์‚ฐ ์‹œ ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์ „๋ถ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ์œ ํšจํ™˜ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ทธ ๊ฒฐ๊ณผ๋Š” NaN ์ด๋‹ค.
  • NaN์€ ์ˆซ์ž ์•„๋‹˜๋ณด๋‹ค๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€(invalid) ์ˆซ์ž, ์‹คํŒจํ•œ ์ˆซ์ž, ๋˜๋Š” ๋ชน์“ธ ์ˆซ์ž๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•˜๋‹ค.
var a = 2 / 'foo'; // NaN

typeof a === 'number'; // true
  • NaN์€ ๊ฒฝ๊ณ„ ๊ฐ’์˜ ์ผ์ข…์œผ๋กœ ์ˆซ์ž ์ง‘ํ•ฉ ๋‚ด์—์„œ ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ์—๋Ÿฌ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์–ด๋–ค ๋ณ€์ˆ˜๊ฐ’์ด ํŠน์ˆ˜ํ•œ ์‹คํŒจ ์ˆซ์ž, ์ฆ‰ NaN์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ null, undefined์ฒ˜๋Ÿผ NaN๋„ ์ง์ ‘ ๋น„๊ตํ•˜๊ณ  ์‹ถ์ง€๋งŒ ํ‹€๋ฆฌ๋‹ค.
  • NaN์€ ๋‹ค๋ฅธ ์–ด๋–ค NaN๊ณผ๋„ ๋™๋“ฑํ•˜์ง€ ์•Š๋‹ค.
  • ์‚ฌ์‹ค์ƒ ๋ฐ˜์‚ฌ์„ฑ(Reflexive)์ด ์—†๋Š” ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ NaN !== NaN์ด๋‹ค.
  • NaN์„ ์—ฌ๋ถ€๋ฅผ ํ™•์ผ ํ•  ๋•Œ๋Š” ๋‚ด์žฅ ์ „์—ญ ์œ ํ‹ธ๋ฆฌํ‹ฐ isNaN() ํ•จ์ˆ˜๊ฐ€ NaN ์—ฌ๋ถ€๋ฅผ ๋งํ•ด์ค€๋‹ค.
  • ํ•˜์ง€๋งŒ isNaN()๋Š” ์น˜๋ช…์ ์ธ ๊ฒฐํ•จ์ด ์žˆ๋Š”๋ฐ ์ด ํ•จ์ˆ˜๋Š” NaN์˜ ์˜๋ฏธ๋ฅผ ๋„ˆ๋ฌด ๊ธ€์ž ๊ทธ๋Œ€๋กœ๋งŒ ํ•ด์„ํ•ด์„œ ์‹ค์ œ๋กœ ์ธ์ž ๊ฐ’์ด ์ˆซ์ž์ธ์ด ์—ฌ๋ถ€๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ „๋ถ€์ด๋‹ค.
var a = 2 / 'foo';
var b = 'foo';

a; // NaN
b; // 'foo'

window.isNaN(a); // true
window.isNaN(b); // true
  • foo๋Š” ๋‹น์—ฐํžˆ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ, ๊ทธ๋ ‡๋‹ค๊ณ  NaN๋Š” ์•„๋‹ˆ๋‹ค.
  • ์ด ๋ฒ„๊ทธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํƒ„์ƒ ์ดํ›„ ์˜ค๋Š˜๊นŒ์ง€ ๊ณ„์†๋๋‹ค.
  • ES6 ๋ถ€ํ„ฐ๋Š” Number.isNaN()์ด ๋“ฑ์žฅํ•˜์—ฌ NaN์—ฌ๋ถ€๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์ด ์ž˜ ์ •์˜๋˜์–ด ์žˆ์–ด์„œ ์—๋Ÿฌ ์—†์ด Infinity(Number.POSITIVE_INFINITY)๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.
var a = 1 / 0; // Infinity
var b = -1 / 0; // Infinity
  • IEEE 754 ๋ช…์„ธ์— ๋”ฐ๋ฅด๋ฉด, ๋ง์…ˆ ๋“ฑ์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ํ‘œํ˜„ํ•˜๊ธฐ ๊ณค๋ž€ํ•  ๋•Œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ ๋ชจ๋“œ๊ฐ€ ๊ฒฐ๊ด๊ฐ’์„ ์ •ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๋ฌดํ•œ์„ ๋ฌดํ•œ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋ฌดํ•œ๋Œ€๋˜๋Š” 1์ด ๋‚˜์˜ฌ๊ฑฐ ๊ฐ™์ง€๋งŒ ์ˆ˜ํ•™์ฑ…, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘ ๋ฌดํ•œ๋Œ€/๋ฌดํ•œ๋Œ€๋Š” ์ •์˜๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์ด๋ฉฐ, ๊ฒฐ๊ด๊ฐ’์€ NaN์ด๋‹ค
  • ์œ ํ•œํ•œ ์–‘์ˆ˜๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ๋‚˜๋ˆ„๋ฉด 0์ด์ง€๋งŒ ์œ ํ•œํ•œ ์Œ์ˆ˜๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ๋‚˜๋ˆ„๋ฉด??
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” 0๊ณผ -0์ด ์กด์žฌํ•œ๋‹ค.
  • ์Œ์˜ ์˜์€ ํ‘œ๊ธฐ๋งŒ -0์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ์ˆ˜์‹์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋˜ํ•œ -0์œผ๋กœ ๋–จ์–ด์ง„๋‹ค.
var a = 0 / -3; // -0
var b = 0 * -3; // -0
  • ๋ง์…ˆ๊ณผ ๋บ„์…ˆ์—๋Š” -0์ด ๋‚˜์˜ฌ ์ˆ˜๊ฐ€ ์—†๋‹ค.
  • ๋ช…์„ธ์— ์˜ํ•˜๋ฉด -0์„ ๋ฌธ์ž์—ดํ™” ํ•˜๋ฉด ํ•ญ์ƒ "0"์ด๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ํ•˜๋ฉด ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ค€๋‹ค.
+"-0"; // -0
Number("-0"); // -0
JSON.parse("-0"); // -0
JSON.stringify(-0); // "0"
  • ํ™•์‹คํ•˜๊ฒŒ -0๊ณผ 0์„ ๊ตฌ๋ถ„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์ค€๋‹ค.
function isNegZero(n) {
n = Number(n);
return (n === 0) && (1 / n === -Infinity);
}

isNegZero(-0); // true
isNegZero(0 / -3); //true
isNegZero(0); // false
  • ์ด๋ ‡๊ฒŒ -0์„ ๋งŒ๋“  ์ด์œ ๋Š” ๊ฐ’์˜ ํฌ๊ธฐ๋กœ ์–ด๋–ค ์ •๋ณด(ex. ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”„๋ ˆ์ž„๋‹น ๋„˜๊น€ ์†๋„)์™€ ๊ทธ ๊ฐ’์˜ ๋ถ€ํ˜ธ๋กœ ๋˜ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๋™์‹œ์— ๋‚˜ํƒ€๋‚ด์•ผ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ“š ํŠน์ดํ•œ ๋™๋“ฑ ๋น„๊ตโ€‹

  • ES6๋ถ€ํ„ฐ๋Š” NaN๊ณผ 0, -0๊ฐ„์˜ ๋™๋“ฑ ๋น„๊ต์— ๋Œ€ํ•œ ์žก๋‹คํ•œ ์˜ˆ์™ธ๋ฅผ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋‘ ๊ฐ’์ด ์ ˆ๋Œ€์ ์œผ๋กœ ๋™๋“ฑํ•œ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์ƒˆ๋กœ์šด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ Object.is()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
var a = 2 / 'foo';
var b = -3 * 0;

Object.is(a, NaN); // true
Object.is(b, -0); // true
Object.is(b, 0); //false
  • ==๋‚˜ ===๊ฐ€ ์•ˆ์ „ํ•˜๋‹ค๋ฉด ๊ตณ์ด Object.is()๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ์ข‹๋‹ค.
  • ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ž๊ฐ€ ์ข€ ๋” ํšจ์šธ์— ์ข‹๊ณ  ์ผ๋ฐ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Object.is()๋Š” ์ฃผ๋กœ ํŠน์ดํ•œ ๋™๋“ฑ ๋น„๊ต์— ์“ด๋‹ค.

๐ŸŽฏ ๊ฐ’ vs ๋ ˆํผ๋Ÿฐ์Šคโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์šฐ์„  ์–ด๋–ค ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ ์„œ๋กœ ๋‹ค๋ฅธ 10๊ฐœ์˜ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋“ค์€ ์ €๋งˆ๋‹ค ํ•ญ์ƒ ๊ณต์œ ๋œ ๋‹จ์ผ ๊ฐ’์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฐธ์กฐํ•œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๊ฐ’ ๋˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค์˜ ํ• ๋‹น ๋ฐ ์ „๋‹ฌ์„ ์ œ์–ดํ•˜๋Š” ๊ตฌ๋ฌธ ์•”์‹œ(Syntacic Hint)๊ฐ€ ์ „ํ˜€ ์—†๋‹ค.
  • ๋Œ€์‹ , ๊ฐ’์˜ ํƒ€์ž…๋งŒ์œผ๋กœ ๊ฐ’-๋ณต์‚ฌ, ๋ ˆํผ๋Ÿฐ์Šค-๋ณต์‚ฌ ๋‘˜ ์ค‘ ํ•œ์ชฝ์ด ๊ฒฐ์ •๋œ๋‹ค.
var a = 2;
var b = a; // b๋Š” ์–ธ์ œ๋‚˜ a์—์„œ ๊ฐ’์„ ๋ณต์‚ฌํ•œ๋‹ค.
b++;
a; // 2
b; // 3

var c = [1, 2, 3];
var d = c; // d๋Š” ๊ณต์œ ๋œ [1, 2, 3]๊ฐ’์˜ ๋ ˆํผ๋Ÿฐ์Šค๋‹ค.
d.push(4);
c; // [1,2,3,4]
d; // [1,2,3,4]
  • null, undefined, string, number, boolean ๊ทธ๋ฆฌ๊ณ  ES6์˜ symbol ๊ฐ™์€ ๋‹จ์ˆœ ํ•œ(์›์‹œ ๊ฐ’)์€ ์–ธ์ œ๋‚˜ ๊ฐ’-๋ณต์‚ฌ ๋ฐฉ์‹์œผ๋กœ ํ• ๋‹น/์ „๋‹ฌ๋œ๋‹ค.
  • ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜ ๋“ฑ ํ•ฉ์„ฑ ๊ฐ’์€ ํ• ๋‹น/์ „๋‹ฌ์‹œ ๋ฐ˜๋“œ์‹œ ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ์œ„ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ a์—๋Š” 2๋ผ๋Š” ์ดˆ๊ธฐ ์‚ฌ๋ณธ์ด ๋“ค์–ด๊ฐ€๊ณ , b์—๋Š” ๋˜ ๋‹ค๋ฅธ ์‚ฌ๋ณธ์ด ์ž๋ฆฌ๋ฅผ ์žก๋Š”๋‹ค. ๋”ฐ๋ผ์„œ b๋ฅผ ๋ฐ”๊ฟˆ์œผ๋กœ์จ a๊นŒ์ง€ ๋™์‹œ์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋ฐฉ๋ฒ•์€ ์—†๋‹ค.
  • ํ•˜์ง€๋งŒ, c์™€ d๋Š” ๋ชจ๋‘ ํ•ฉ์„ฑ ๊ฐ’์ด์ž ๋™์ผํ•œ ๊ณต์œ  ๊ฐ’ [1,2,3]์— ๋Œ€ํ•œ ๊ฐœ๋ณ„ ๋ ˆํผ๋Ÿฐ์Šค๋‹ค.
  • ์—ฌ๊ธฐ์„œ ๊ธฐ์–ตํ•ด์•ผ ํ•  ์ ์€ c์™€ d๊ฐ€ [1,2,3]์„ ์†Œ์œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ง€ ์ด ๊ฐ’์„ ๋™๋“ฑํ•˜๊ฒŒ ์ฐธ์กฐ๋งŒ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ์‹ค์ œ ๊ณต์œ ํ•œ ๋ฐฐ์—ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด, ์ด ๊ณต์œ  ๊ฐ’ ํ•œ ๊ตฐ๋ฐ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ๋‘ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๊ฐฑ์‹ ๋œ ๊ฐ’ [1,2,3,4]๋ฅผ ๋™์‹œ์— ๋ฐ”๋ผ๋ณด๊ฒŒ ๋œ๋‹ค.
  • ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’ ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ A ๋ ˆํผ๋Ÿฐ์Šค๋กœ B ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†๋‹ค.
var a = [1,2,3];
var b = a;
a; // [1,2,3]
b; // [1,2,3]

// ๊ทธ ํ›„
b = [4,5,6];
a; // [1,2,3]
b; // [4,5,6]
  • b = [4,5,6]์œผ๋กœ ํ• ๋‹นํ•ด๋„ a๊ฐ€ ์ฐธ์กฐํ•˜๋Š” [1,2,3]์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ๋˜๋ ค๋ฉด b๊ฐ€ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์•„๋‹Œ ํฌ์ธํ„ฐ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํฌ์ธํ„ฐ๋Š” ์—†๋‹ค.
  • ๋‹ค์Œ ์˜ˆ์ œ๋Š” ํ•จ์ˆ˜ ์ธ์ž์ด๋‹ค.
function foo(x) {
x.push(4);
x; // [1,2,3,4]

// ๊ทธ ํ›„
x = [4,5,6];
x.push(7);
x; // [4,5,6,7]
}

var a = [1,2,3];
foo(a);
a; // [1,2,3,4]
  • a๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด a์˜ ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ๋ณธ์ด x์— ํ• ๋‹น๋œ๋‹ค. x์™€ a๋Š” ๋ชจ๋‘ ๋™์ผํ•œ [1,2,3] ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ„๋„์˜ ๋ ˆํผ๋Ÿฐ์Šค๋‹ค.
  • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ด ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€๋งŒ, ๊ทธ ํ›„ x = [4,5,6]์œผ๋กœ ์ƒˆ ๊ฐ’์„ ํ• ๋‹นํ•ด๋„ ์ดˆ๊ธฐ ๋ ˆํผ๋Ÿฐ์Šค a๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋˜ ๊ฐ’์—๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์ด ์—†๋‹ค.
  • ์ฆ‰, a ๋ ˆํผ๋Ÿฐ์Šค๋Š” ์—ฌ์ „ํžˆ [1,2,3,4] ๊ฐ’์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋‹ค.
  • ๋ ˆํผ๋Ÿฐ์Šค x๋กœ a๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ’์„ ๋ฐ”๊ฟ€ ๋„๋ฆฌ๋Š” ์—†๋‹ค. ๋‹ค๋งŒ a์™€ x ๋‘˜ ๋‹ค ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณต์œ  ๊ฐ’์˜ ๋‚ด์šฉ๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜์—ฌ ํ• ๋‹นํ•˜๋Š” ์‹์œผ๋กœ๋Š” a์˜ ๋‚ด์šฉ์„ [4,5,6,7]๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
  • ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ๋ฐฐ์—ด ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.
function foo(x) {
x.push(4);
x; // [1,2,3,4]

// ๊ทธ ํ›„
x.length = 0; // ๊ธฐ์กด ๋ฐฐ์—ด์„ ์ฆ‰์‹œ ๋น„์šด๋‹ค.
x.push(4,5,6,7);
x; // [4,5,6,7]
}

var a = [1,2,3];

foo(a);
a; // [4,5,6,7]
  • x.length = 0; x.push(4,5,6,7);์€ ์ƒˆ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ๋‘ ๋ณ€์ˆ˜๊ฐ€ ๊ณต์œ ํ•œ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ์ด๋ฏ€๋กœ a๋Š” ์ƒˆ๋กœ์šด ๊ฐ’ [4,5,6,7]์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ํ•ฉ์„ฑ ๊ฐ’์„ ๊ฐ’-๋ณต์‚ฌ์— ์˜ํ•ด ํšจ๊ณผ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋ ค๋ฉด ์†์ˆ˜ ๊ฐ’์˜ ์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด ์ „๋‹ฌํ•œ ๋ ˆํผ๋Ÿฐ์ˆ˜๊ฐ€ ์›๋ณธ์„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.
foo(a.slice());
  • ์ธ์ž ์—†์ด slice()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ „ํ˜€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์˜ (์–•์€ ๋ณต์‚ฌ์— ์˜ํ•œ) ์‚ฌ๋ณธ์„ ๋งŒ๋“ ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋ณต์‚ฌํ•œ ์‚ฌ๋ณธ๋งŒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ „๋‹ฌํ•˜๋‹ˆ foo()๋Š” a์˜ ๋‚ด์šฉ์„ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์—†๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’์„ ๋ ˆํผ๋Ÿฐ์Šค์ฒ˜๋Ÿผ ๋ฐ”๋€ ๊ฐ’์ด ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฐ˜์˜๋˜๋„๋ก ๋„˜๊ธฐ๋ ค๋ฉด ์›์‹œ ๊ฐ’์„ ๋‹ค๋ฅธ ํ•ฉ์„ฑ ๊ฐ’(๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ)์œผ๋กœ ๊ฐ์‹ธ์•ผํ•œ๋‹ค.
function foo(wrapper) {
wrapper.a = 42;
}

var obj = {
a: 2
};
foo(obj);
obj.a; // 42
  • obj๋Š” ์Šค์นผ๋ผ ์›์‹œ ํ”„๋กœํผํ‹ฐ a๋ฅผ ๊ฐ์‹ผ ๋ž˜ํผ(Wrapper)๋กœ foo() ํ•จ์ˆ˜์— obj ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ๋ณธ์ด ์ „๋‹ฌ๋˜๊ณ  ๋ž˜ํผ ์ธ์ž์˜ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค.
  • ์ด์ œ ๋ž˜ํผ ๋ ˆํผ๋Ÿฐ์Šค๋กœ ๊ณต์œ ๋œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ™์€ ์›๋ฆฌ๋กœ 2์™€ ๊ฐ™์€ ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’์„ ๋ ˆํผ๋Ÿฐ์Šค ํ˜•ํƒœ๋กœ ๋„˜๊ธฐ๋ ค๋ฉด Number ๊ฐ์ฒด ๋ ˆํผ๋กœ ์›์‹œ ๊ฐ’์„ ๋ฐ•์‹ฑํ•˜๋ฉด ๋œ๋‹ค.
  • Number ๊ฐ์ฒด์˜ ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ๋ณธ์ด ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์€ ๋งž์ง€๋งŒ ๊ณต์œ ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์ž๋™์œผ๋กœ ๊ณต์œ ๋œ ์›์‹œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๊ถŒํ•œ์ด ์ฃผ์–ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
function foo(x) {
x = x + 1;
x; // 3
}

var a = 2;
var b = new Number(a); // Object(a)๋„ ๊ฐ™์€ ํ‘œํ˜„์ด๋‹ค.

foo(b); // 2
  • ์œ„์˜ ๋ฌธ์ œ๋Š” ๋‚ด๋ถ€์˜ ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’์ด ๋ถˆ๋ณ€์ด๋ž€ ์ ์ด๋‹ค.(๋ฌธ์ž์—ด, ๋ถˆ๋ฆฌ์–ธ ํฌํ•จ)
  • ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’ 2๋ฅผ ๊ฐ€์ง„ Number ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด์™€ ๋™์ผํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ์›์‹œ ๊ฐ’์„ ๊ฐ€์ง€๋„๋ก ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋‹จ์ง€ ๋‹ค๋ฅธ ๊ฐ’์„ ๋„ฃ์€, ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ Number๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.
  • ํ‘œํ˜„์‹ x + 1์—์„œ x๊ฐ€ ์‚ฌ์šฉ๋  ๋‚ด๋ถ€์— ๊ฐ„์ง๋œ ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’ 2 ๋Š” Number๊ฐ์ฒด์—์„œ ์ž๋™ ์–ธ๋ฐ•์‹ฑ๋˜๋ฏ€๋กœ x = x + 1์˜ x๋Š” ๊ณต์œ ๋œ ๋ ˆํผ๋Ÿฐ์Šค์—์„œ Number ๊ฐ์ฒด๋กœ ๊ต๋ฌ˜ํ•˜๊ฒŒ ๋’ค๋ฐ”๋€Œ๊ณ  2 + 1 ๋ง์…ˆ ๊ฒฐ๊ณผ์ธ ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’ 3์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ b๋Š” ์›์‹œ ๊ฐ’ 2๋ฅผ ์”Œ์šด, ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€/๋ถˆ๋ณ€์˜ ์›๋ณธ Number๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ๋ ˆํผ Number๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ณด๋‹จ ์ฐจ๋ผ๋ฆฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์†์ˆ˜ ๊ฐ์ฒด ๋ ˆํผ(obj)๋ฅผ ์“ฐ๋Š” ํŽธ์ด ํ›จ์”ฌ ๋‚ซ๋‹ค.

๐ŸŽฏ ์ •๋ฆฌํ•˜๊ธฐโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์€ ๋ชจ๋“  ํƒ€์ž…์˜ ๊ฐ’๋“ค์„ ์ˆซ์ž๋กœ ์ธ๋ฑ์‹ฑํ•œ ์ง‘ํ•ฉ์ด๋‹ค.
  • ๋ฌธ์ž์—ด์€ ์ผ์ข…์˜ ์œ ์‚ฌ ๋ฐฐ์—ด์ด์ง€๋งŒ, ๋‚˜๋ฆ„ ํŠน์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด๋กœ ๋‹ค๋ฃจ๊ณ ์ž ํ•  ๋•Œ๋Š” ์กฐ์‹ฌํ•ด์•ผ ๋œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆซ์ž๋Š” ์ •์ˆ˜์™€ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.
  • null ํƒ€์ž…์€ null์ด๋ผ๋Š” ๊ฐ’ ํ•˜๋‚˜๋ฟ์ด๊ณ , ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ undefined ํƒ€์ž…๋„ ๊ฐ’์€ undefined ๋ฟ์ด๋‹ค.
  • undefined๋Š” ํ• ๋‹น๋œ ๊ฐ’์ด ์—†๋‹ค๋ฉด ๋ชจ๋“  ๋ณ€์ˆ˜/ํ”„๋กœํผํ‹ฐ์˜ ๋””ํดํŠธ ๊ฐ’์ด๋‹ค.
  • void ์—ฐ์‚ฐ์ž๋Š” ์–ด๋–ค ๊ฐ’์ด๋ผ๋„ undefined๋กœ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆฐ๋‹ค.
  • ์ˆซ์ž์—๋Š” NaN, +Infinity, -Infinity, -0๊ณผ ๊ฐ™์€ ํŠน์ˆ˜ ๊ฐ’์ด ์žˆ๋‹ค.
  • ๋‹จ์ˆœ ์Šค์นผ๋ผ ์›์‹œ ๊ฐ’(๋ฌธ์ž์—ด, ์ˆซ์ž ๋“ฑ)์€ ๊ฐ’-๋ณต์‚ฌ์— ์˜ํ•ด, ํ•ฉ์„ฑ ๊ฐ’(๊ฐ์ฒด ๋“ฑ)์€ ๋ ˆํผ๋Ÿฐ์Šค-๋ณต์‚ฌ์— ์˜ํ•ด ๊ฐ’์ด ํ• ๋‹น/์ „๋‹ฌ๋œ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ ˆํผ๋Ÿฐ์Šค/ํฌ์ธํ„ฐ์™€๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฐœ๋…์œผ๋กœ, ๋˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜/๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์•„๋‹Œ ์˜ค์ง ์ž์‹ ์˜ ๊ฐ’๋งŒ ๊ฐ€๋ฆฌํ‚จ๋‹ค.