# * YOU DON'T KNOW JS - ํƒ€์ž…

Written by ๐Ÿ“ Taekbari

# ํƒ€์ž…

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ช…์„ธ์—์„œ ํƒ€์ž…์˜ ์ •์˜ : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„, ๊ฐœ๋ฐœ์ž ๋ชจ๋‘์—๊ฒŒ ์–ด๋–ค ๊ฐ’์„ ๋‹ค๋ฅธ ๊ฐ’๊ณผ ๋ถ„๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š”, ๊ณ ์œ ํ•œ ๋‚ด๋ถ€ ํŠน์„ฑ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

ex) ๊ธฐ๊ณ„(์—”์ง„)์™€ ์‚ฌ๋žŒ(๊ฐœ๋ฐœ์ž)์ด 42(์ˆซ์ž)๋ž€ ๊ฐ’์„ "42"(๋ฌธ์ž์—ด)๋ž€ ๊ฐ’๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰ํ•œ๋‹ค๋ฉด, ๋‘ ๊ฐ’์€ ํƒ€์ž…(์ˆซ์ž์™€ ๋ฌธ์ž์—ด)์ด ์„œ๋กœ ๋‹ค๋ฅด๋‹ค.

๊ฑฐ์˜ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ•์ œ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋ฏ€๋กœ ํƒ€์ž…์„ ํ™•์‹คํ•˜๊ฒŒ ์ธ์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฆ์š”ํ•˜๋‹ค.

# ๋‚ด์žฅ ํƒ€์ž…

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋‹ค์Œ 7๊ฐ€์ง€ ๋‚ด์žฅ ํƒ€์ž…์ด ์žˆ๋‹ค.

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

typeof ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ 7๊ฐ€์ง€์˜ ๋‚ด์žฅ ํƒ€์ž…๊ณผ 1:1๋กœ ์ •ํ™•ํ•˜๊ฒŒ ๋งค์นญ๋˜์ง€ ์•Š๋Š”๋‹ค.
null์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ null์ด ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๊ณ  object๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

typeof null === 'object'  // true
1

์ถ”๊ฐ€์ ์œผ๋กœ typeof๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ function์ด ์žˆ๋‹ค.
๋ช…์„ธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด function์€ object์˜ 'ํ•˜์œ„ ํƒ€์ž…'์ด๋ฉฐ 'ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด'๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค.

# ๊ฐ’์€ ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค

๊ฐ’์—๋Š” ํƒ€์ž…์ด ์žˆ์ง€๋งŒ, ๋ณ€์ˆ˜์—” ๋”ฐ๋กœ ํƒ€์ž…์ด๋ž€ ์—†๋‹ค. ๋ณ€์ˆ˜๋Š” ์–ธ์ œ๋ผ๋„ ์–ด๋–ค ํ˜•ํƒœ์˜ ๊ฐ’์ด๋ผ๋„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” 'ํƒ€์ž… ๊ฐ•์ œ'๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ€์ˆ˜์— typeof ์—ฐ์‚ฐ์ž๋ฅผ ๋Œ€์–ด๋ณด๋Š” ๊ฒƒ์€ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ฌผ์–ด๋ณด๋Š” ์งˆ๋ฌธ๊ณผ ๊ฐ™์ง€๋งŒ, ์‹ค์ œ๋กœ ํƒ€์ž…์ด๋ž€ ๊ฐœ๋…์ด ๋ณ€์ˆ˜์— ์—†์œผ๋ฏ€๋กœ ๋ณ€์ˆ˜์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์˜ ํƒ€์ž…์„ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

# ๊ฐ’์ด ์—†๋Š” vs ์„ ์–ธ๋˜์ง€ ์•Š์€

๊ฐ’์ด ์—†๋Š”(undefined) : ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์Šค์ฝ”ํ”„์— ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์—ˆ์œผ๋‚˜ ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ
์„ ์–ธ๋˜์ง€ ์•Š์€(undefined) : ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์Šค์ฝ”ํ”„์— ๋ณ€์ˆ˜ ์ž์ฒด๊ฐ€ ์„ ์–ธ์กฐ์ฐจ ๋˜์ง€ ์•Š์€ ์ƒํƒœ

์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ typeof ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ๋•Œ๋ฌธ์— ๋‘ ์ƒํƒœ๊ฐ€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—„์—ฐํžˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค.

let a;
typeof a;  // "undefined"
typeof b;  // "undefined"
1
2
3

typeof ์—ฐ์‚ฐ์œผ๋กœ ์ธํ•ด ๊ฐœ๋…์— ํ˜ผ๋™์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•ˆ์ „๊ฐ€๋“œ ์—ญํ• ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

let a = 2, c = 0;

if ( b ) {  // ReferenceError: b is not defined
  c = a + b;
}

if ( typeof b !== 'undefined' ) {
  c = a + b;
}
1
2
3
4
5
6
7
8
9

# ๊ฐ’

# ๋ฐฐ์—ด

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

let a = [1, '2', [3]];
1

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ์œ„์น˜์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ ์ธํ•ด์„œ ์ค‘๊ฐ„์— '๋นˆ ์Šฌ๋กฏ'์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

let a = [];

a[0] = 1;
a[2] = 3;

a[1]; // undefined
a.length; // 3
1
2
3
4
5
6
7

๋ฐฐ์—ด ์ธ๋ฑ์Šค๋Š” ์ˆซ์ž์ธ๋ฐ, ๋ฐฐ์—ด ์ž์ฒด๋„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—ฌ์„œ ํ‚ค/ํ”„๋กœํผํ‹ฐ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
(ํ•˜์ง€๋งŒ ๋ฐฐ์—ด length๊ฐ€ ์ฆ๊ฐ€ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค)

let a = [];

a[0] = 1;
a['footer'] = 2;

a.length; // 1
a['footer'];  // 2
a.footer; // 2
1
2
3
4
5
6
7
8

ํ‚ค๋กœ ๋„ฃ์€ ๋ฌธ์ž์—ด ๊ฐ’์ด 10์ง„์ˆ˜ ์ˆซ์ž๋กœ ํƒ€์ž…์ด ๋ฐ”๋€Œ๋ฉด, ๋ฌธ์ž์—ด ํ‚ค๊ฐ€ ์•„๋‹Œ ์ˆซ์ž ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ดˆ๋ž˜๋œ๋‹ค.

let a = [];

a['13'] = 42;
a.length; // 14
1
2
3
4

TIP

๋ฌธ์ž์—ด ํƒ€์ž…์˜ ํ‚ค/ํ”„๋กœํผํ‹ฐ ์‚ฌ์šฉ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

# ๋ฌธ์ž์—ด

ํ”ํžˆ ๋ฌธ์ž์—ด์€ ๋‹จ์ง€ ๋ฌธ์ž์˜ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์‹ค์ œ๋กœ ์ƒ๊น€์ƒˆ๋งŒ ๋น„์Šทํ•  ๋ฟ ๋ฌธ์ž ๋ฐฐ์—ด๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค.

let a = 'foo';
let b = ['f', 'o', 'o'];
1
2

๋ฌธ์ž์—ด์€ ๋ฐฐ์—ด๊ณผ ๊ฒ‰๋ชจ์Šต์ด ๋‹ฎ์•˜๋‹ค.(์œ ์‚ฌ๋ฐฐ์—ด) ๋‘˜ ๋‹ค length ํ”„๋กœํผํ‹ฐ, indexOf(), concat() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.

๊ฒ‰๋ชจ์Šต์€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’(immutable)์ด๊ณ  ๋ฐฐ์—ด์€ ๊ฐ€๋ณ€ ๊ฐ’(mutable)์ด๋‹ค. ๋ฐฐ์—ด์ฒ˜๋Ÿผ(a[1]) ๋ฌธ์ž์—ด์˜ ํŠน์ • ๋ฌธ์ž๋ฅผ ์ ‘๊ทผํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์œ ํšจํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.(์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ ๊ตฌ๋ฒ„์ „์—์„œ๋Š” ๋ฌธ๋ฒ• ์—๋Ÿฌ๋กœ ์ธ์‹ํ•œ๋‹ค.)
๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ ๊ฐ’์ด๋ฏ€๋กœ ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋Š” ๊ทธ ๋‚ด์šฉ์„ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•œ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

TIP

๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์‹ค์ƒ ๋ฌธ์ž์—ด์— ์“ธ ์ˆ˜ ์—†์ง€๋งŒ, ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋ถˆ๋ณ€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๋นŒ๋ ค ์“ธ ์ˆ˜๋Š” ์žˆ๋‹ค.

let a = 'foo';

a.join; // undefined
a.map; // undefined

let c = Array.prototype.join.call( a, '-' );
let d = Array.prototype.map.call( a, (value) => {
  return value.toUpperCase() + '.';
}).join('');

c;  // "f-o-o"
d;  // "F.O.O."
1
2
3
4
5
6
7
8
9
10
11
12

WARNING

reverse ๋ฉ”์„œ๋“œ๋Š” ๊ฐ€๋ณ€ ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

let a = 'foo';

a.reverse;  // undefined
Array.prototype.reverse.call( a );  // Uncaught TypeError
1
2
3
4

# ์ˆซ์ž

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ˆซ์ž ํƒ€์ž…์€ number๊ฐ€ ์œ ์ผํ•˜๋ฉฐ ์ •์ˆ˜, ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์€ 10์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ‘œ์‹œํ•œ๋‹ค.

let a = 42;
let b = 42.3;

let c = .42;  // ์†Œ์ˆ˜์  ์•ž 0์€ ์ƒ๋žต ๊ฐ€๋Šฅ.
let d = 42.;  // ์†Œ์ˆ˜์  ๋’ค 0์ผ ๋•Œ๋„ ์ƒ๋žต ๊ฐ€๋Šฅ.
1
2
3
4
5

์•„์ฃผ ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ๊ฐ’์€ ์ง€์ˆ˜ํ˜•์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

let a = 5E10;
a;  // 50000000000
let b = 1 / a;  // 2e-11
1
2
3

์ˆซ์ž ๊ฐ’์€ Number ๊ฐ์ฒด ๋ž˜ํผ๋กœ ๋ฐ•์‹ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Number.prototype ๋ฉ”์„œ๋“œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

let a = 42.59;

a.toFixed( 0 ); // "43"
a.toFixed( 1 ); // "42.6"
a.toFixed( 2 ); // "42.59"
a.toFixed( 3 ); // "42.590"
1
2
3
4
5
6

TIP

toFixed ํ•จ์ˆ˜๋Š” ์ˆซ์ž ๊ฐ’์„ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Number.prototype ๋ฉ”์„œ๋“œ๋Š” ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์—์„œ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ํ• ๋‹นํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ . ์†Œ์ˆ˜์ ์ผ ๊ฒฝ์šฐ์—” ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ์ž๊ฐ€ ์•„๋‹Œ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์˜ ์ผ๋ถ€๋กœ ํ•ด์„๋˜๋ฏ€๋กœ ์กฐ์‹ฌํ•ด์•ผํ•œ๋‹ค.

// ์ž˜๋ชป๋œ ๊ตฌ๋ฌธ
42.toFixed( 3 );  // SyntaxError

// ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ๋ฌธ
(42).toFixed( 3 );  // "42.000"
0.42.toFixed( 3 );  // "0.420"
42..toFixed( 3 );   // "42.000"
42 .toFixed( 3 );   // "42.000"
1
2
3
4
5
6
7
8

# ํŠน์ˆ˜ ๊ฐ’

# Undefined

Undefined ํƒ€์ž…์˜ ๊ฐ’์€ undefined ๋ฐ–์— ์—†๋‹ค. ๋Š์Šจํ•œ ๋ชจ๋“œ์—์„œ๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„์—์„œ undefined ์‹๋ณ„์ž์— ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

function foo () {
  undefined = 2;  // ์—๋Ÿฌ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ.
}

foo();
1
2
3
4
5

WARNING

undefined ์‹๋ณ„์ž์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

# void ์—ฐ์‚ฐ์ž

ํ‘œํ˜„์‹ void __๋Š” ์–ด๋–ค ๊ฐ’์ด๋“  ๋ฌดํšจ๋กœ ๋งŒ๋“ค์–ด ํ•ญ์ƒ ๊ฒฐ๊ด๊ฐ’์„ undefined๋กœ ๋งŒ๋“ ๋‹ค. ๊ธฐ์กด ๊ฐ’์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ ํ›„ ๊ฐ’์€ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋‹ค.

let a = 42;

console.log( void a, a ); // undefined 42
1
2
3

void ์—ฐ์‚ฐ์ž๋Š” ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ณณ์—์„œ ๊ทธ ๊ฐ’์ด undefined๊ฐ€ ๋˜์–ด์•ผ ์ข‹์„ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

# ํŠน์ˆ˜ ์ˆซ์ž - NaN

์ˆ˜ํ•™ ์—ฐ์‚ฐ ์‹œ ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ์ „๋ถ€ ์ˆซ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ์œ ํšจํ•œ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†์„ ๋•Œ์˜ ๊ฒฐ๊ด๊ฐ’์œผ๋กœ ๊ธ€์ž ๊ทธ๋Œ€๋กœ '์ˆซ์ž ์•„๋‹˜'์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, '์ˆซ์ž ์•„๋‹˜' ๋ณด๋‹ค๋Š” '์œ ํšจํ•˜์ง€ ์•Š์€ ์ˆซ์ž', '์‹คํŒจํ•œ ์ˆซ์ž'๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•˜๋‹ค.

NaN์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผํ•˜๋Š” ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

// ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ typeof ๊ฐ’์€ 'number'์™€ ๊ฐ™๋‹ค.
let a = 2 / 'foo';  // NaN
typeof a === 'number';  // true

// NaN์€ ๋‹ค๋ฅธ ์–ด๋–ค NaN๊ณผ๋„ ๋™๋“ฑํ•˜์ง€ ์•Š๋‹ค.(์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’)
let b = 2 / 'foo';  // NaN
b === NaN;  // false
1
2
3
4
5
6
7

NaN ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ isNaN()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ isNaN()์€ '์ธ์ž ๊ฐ’์ด ์ˆซ์ž์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ‰๊ฐ€'ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

let a = 2 / 'foo';
let b = 'foo';

a;  // NaN
b;  // "foo"

isNaN( a ); // true
isNaN( b ); // true
1
2
3
4
5
6
7
8

TIP

ES6๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” Number.isNaN()์„ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

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

๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ๊ฐ’์€ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ์— ๋”ฐ๋ผ ๊ฐ’-๋ณต์‚ฌ ๋˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค ๋ณต์‚ฌ์˜ ํ˜•ํƒœ๋กœ ํ• ๋‹น/์ „๋‹ฌํ•œ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ค๋ฅด๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ’ ๋˜๋Š” ๋ ˆํผ๋Ÿฐ์Šค์˜ ํ• ๋‹น ๋ฐ ์ „๋‹ฌ์„ ์ œ์–ดํ•˜๋Š” ๊ตฌ๋ฌธ ์•”์‹œ๊ฐ€ ์ „ํ˜€ ์—†๋‹ค. ๋Œ€์‹ , ๊ฐ’์˜ ํƒ€์ž…๋งŒ์œผ๋กœ ๊ฐ’-๋ณต์‚ฌ, ๋ ˆํผ๋Ÿฐ์Šค-๋ณต์‚ฌ ๋‘˜ ์ค‘ ํ•œ์ชฝ์ด ๊ฒฐ์ •๋œ๋‹ค.

let a = 2;
let b = a;  // 'b'๋Š” ์–ธ์ œ๋‚˜ 'a'์—์„œ ๊ฐ’์„ ๋ณต์‚ฌํ•œ๋‹ค.
b++;
a;  // 2
b;  // 3

let c = [1, 2, 3];
let d = c;  // 'd'๋Š” ๊ณต์œ ๋œ '[1, 2, 3]'๊ฐ’์˜ ๋ ˆํผ๋Ÿฐ์Šค์ด๋‹ค.
d.push( 4 );
c;  // [1, 2, 3, 4]
d;  // [1, 2, 3, 4]
1
2
3
4
5
6
7
8
9
10
11

null, undefined, string, number, boolean ๊ทธ๋ฆฌ๊ณ  symbol ๊ฐ™์€ ๋‹จ์ˆœ ๊ฐ’์€ ์–ธ์ œ๋‚˜ ๊ฐ’-๋ณต์‚ฌ ๋ฐฉ์‹์œผ๋กœ ํ• ๋‹น/์ „๋‹ฌ๋œ๋‹ค. ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜ ๋“ฑ ํ•ฉ์„ฑ ๊ฐ’์€ ํ• ๋‹น/์ „๋‹ฌ์‹œ ๋ฐ˜๋“œ์‹œ ๋ ˆํผ๋Ÿฐ์Šค ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•œ๋‹ค.

๋ฐฐ์—ด ๊ฐ™์€ ํ•ฉ์„ฑ ๊ฐ’์„ ๊ฐ’-๋ณต์‚ฌ์— ์˜ํ•ด ์ „๋‹ฌํ•˜๋ ค๋ฉด ์†์ˆ˜ ๊ฐ’์˜ ์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด ์ „๋‹ฌํ•œ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์›๋ณธ์„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.

foo( a.slice() );
1

WARNING

์–•์€ ๋ณต์‚ฌ์— ์˜ํ•ด ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ, ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ’์˜ ๋ณ€๊ฒฝ์€ ์›๋ณธ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์›์‹œ ๊ฐ’์„ ๋ ˆํผ๋Ÿฐ์Šค์ฒ˜๋Ÿผ ๋ฐ”๋€ ๊ฐ’์ด ๋ฐ”๋กœ ๋ฐ˜์˜๋˜๋„๋ก ๋„˜๊ธฐ๋ ค๋ฉด ์›์‹œ ๊ฐ’์„ ํ•ฉ์„ฑ ๊ฐ’(๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ)์œผ๋กœ ๊ฐ์‹ธ์•ผํ•œ๋‹ค.

const foo = (wrapper) => {
  wrapper.a = 42;
}
const obj = { a: 2 };

foo( obj );
obj.a;  // 42
1
2
3
4
5
6
7
Last Updated: 7/5/2019, 8:38:55 AM