Skip to content

Latest commit

ย 

History

History
214 lines (153 loc) ยท 10.5 KB

built_in_object.md

File metadata and controls

214 lines (153 loc) ยท 10.5 KB

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด๋Š” ์•ˆํƒ€๊น๊ฒŒ๋„ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ์žฅ์—์„œ๋Š” ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด, ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด, ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด๋Š” ์•Œ์•„ ๋ณผ ๊ฒ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ๋ถ„๋ฅ˜

์–ธ๊ธ‰ํ–ˆ๋“ฏ, ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

  • ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด(Standard Built-in Objects, Native Objects, Global Objects)
    • ECMAScript ์‚ฌ์–‘์— ์ •์˜๋œ ๊ฐ์ฒด๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์— ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ €, Node.js)๊ณผ ๊ด€๊ณ„์—†์ด ์–ธ์ œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
    • ๋ณ„๋„์˜ ์„ ์–ธ ์—†์ด ์ „์—ญ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์–ธ์ œ๋‚˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด(Host Objects)
    • ECMAScript ์‚ฌ์–‘์— ์ •์˜๋˜์ง€ ์•Š์€, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ €, Node.js)์— ์ถ”๊ฐ€๋กœ ์ œ๊ณต๋˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด(User-Defined Objects)
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด

40์—ฌ ๊ฐœ์˜ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Math, Reflect, JSON์„ ์ œ์™ธํ•œ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋Š” ๋ชจ๋‘ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ : ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ, ์ •์  ๋ฉ”์„œ๋“œ ๋‘˜ ๋‹ค ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ : ์ •์  ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์ธ String์„ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•˜์—ฌ ์ƒ์„ฑํ•œ String ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์€ String.prototype ์ด๋“ฏ, ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์€ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์˜ prototype ํ”„๋กœํผํ‹ฐ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ๊ฐ™์•„ ๋ณด์ด์ฃ ? ๊ทธ๋Ÿฌ๋‚˜ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋Š” ์ธ์Šคํ„ด์Šค ์—†์ด๋„ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ๋นŒํŠธ์ธ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์–ธ๊ธ‰ํ•˜๋Š” ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋Š” ์–ด๋””์„ ๊ฐ€ ๋งŽ์ด ๋ณธ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์›์‹œ ๊ฐ’์ด์ฃ . ์ด๋Ÿฐ ์›์‹œ ๊ฐ’์„ ์™œ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ• ๊นŒ์š”?


์›์‹œ๊ฐ’๊ณผ ๋ž˜ํผ ๊ฐ์ฒด

์›์‹œ ๊ฐ’์€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์ง€๋งŒ, ๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งˆ์น˜ ๊ฐ์ฒด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ด…์‹œ๋‹ค.

const str = 'hi';

console.log(str.length);        // 2
console.log(str.toUpperCase()); // HI

์–ด๋–ป๊ฒŒ ์ด๋Ÿด๊นŒ์š”? ์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ์ด๋“ค ์›์‹œ ๊ฐ’์— ๋Œ€ํ•ด ๋งˆ์น˜ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•(๋˜๋Š” ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•)์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์ผ์‹œ์ ์œผ๋กœ ๊ทธ๋“ค๊ณผ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์•”๋ฌต์ ์œผ๋กœ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋กœ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๋‹ค์‹œ ์›์‹œ ๊ฐ’์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž„์‹œ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ž˜ํผ ๊ฐ์ฒด(Wrapper Object) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋ž˜ํผ ๊ฐ์ฒด์ธ String ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋ฌธ์ž์—ด์€ ๋ž˜ํผ ๊ฐ์ฒด์˜ [[StringData]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์— ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ด์ฃ . ๊ทธ๋Ÿผ String.prototype์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ž˜ํผ ๊ฐ์ฒด์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ž˜ํผ ๊ฐ์ฒด์˜ [[StringData]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์— ํ• ๋‹น๋œ ์›์‹œ ๊ฐ’์„ ์›๋ž˜์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ๋ž˜ํผ ๊ฐ์ฒด๋Š” GC(Garbage Collection)์˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” Number, Boolean๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. Symbol์€ ์ถ”ํ›„ ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ . ์ด ์™ธ์˜ ์›์‹œ ๊ฐ’์ธ null, undefined๋Š” ๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์œ ์˜ํ•˜์„ธ์š”.


์ „์—ญ ๊ฐ์ฒด

์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ด์ „ ๋‹จ๊ณ„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด ์–ด๋–ค ๊ฐ์ฒด๋ณด๋‹ค ๋จผ์ € ์ƒ์„ฑ๋˜๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด๋กœ ์–ด๋–ค ๊ฐ์ฒด์— ์†ํ•˜์ง€ ์•Š์€ ์ตœ์ƒ์œ„ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋Š” winow, self, this, frames๊ฐ€, Node.js ํ™˜๊ฒฝ์—์„œ๋Š” global์ด ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งŒํผ ํ™˜๊ฒฝ๋งˆ๋‹ค ์ด๋ฆ„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ES11์— ๋„์ž…๋œ globalThis๋Š” ์ด ์‹๋ณ„์ž๋ฅผ ํ†ต์ผํ•œ ์‹๋ณ„์ž๋กœ ECMAScript ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.

// ES11์— ๋„์ž…๋œ globalThis

// ๋ธŒ๋ผ์šฐ์ €
console.log(globalThis === this);   // true
console.log(globalThis === window); // true
console.log(globalThis === self);   // true
console.log(globalThis === frames); // true

// Node.js
console.log(globalThis === this);   // true
console.log(globalThis === global); // true

์ „์—ญ ๊ฐ์ฒด๋Š” ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์™€ ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ํ˜ธ์ŠคํŠธ(ํด๋ผ์ด์–ธํŠธ Web API, Node.js Host API) ๊ฐ์ฒด, var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜/ํ•จ์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ „์—ญ ๊ฐ์ฒด ์ž์‹ ์€ ์–ด๋–ค ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋„ ์•„๋‹ˆ๊ณ , ๊ฐ์ฒด์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ์ƒ ์ด๋“ค์„ ํ”„๋กœํผํ‹ฐ๋กœ ์†Œ์œ ํ•˜๋Š” ๊ฒƒ์ด์ฃ . ์ „์—ญ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์ „์—ญ ๊ฐ์ฒด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ง์€ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  2. ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ window(๋˜๋Š” global)์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ „์—ญ ๊ฐ์ฒด๋Š” ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์ธ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  5. var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜, ์•”๋ฌต์  ์ „์—ญ, ์ „์—ญ ํ•จ์ˆ˜๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์†Œ์œ ํ•ฉ๋‹ˆ๋‹ค.
  6. let, const ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค(์ด๋“ค์€ ์ „์—ญ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์˜ ์„ ์–ธ์  ํ™˜๊ฒฝ ๋ ˆ์ฝ”๋“œ์ธ ๊ฐœ๋…์  ๋ธ”๋ก์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค).
  7. ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ „์—ญ ๊ฐ์ฒด window๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ง์€ ๋ถ„๋ฆฌ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋„ ํ•˜๋‚˜์˜ ์ „์—ญ์„ ๊ณต์œ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ „์—ญ ๊ฐ์ฒด์˜ ๋Œ€ํ‘œ์ ์ธ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ช‡๊ฐœ ์‚ดํŽด๋ณผ๊นŒ์š”?


๋นŒํŠธ์ธ ์ „์—ญ ํ”„๋กœํผํ‹ฐ

์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ, ์ฃผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Infinity : ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’ Infinity๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    console.log(window.Infinity === Infinity);  // true
    
    console.log(3/0);             // Infinity, ์–‘์˜ ๋ฌดํ•œ๋Œ€
    console.log(-3/0);            // -Infinity, ์Œ์˜ ๋ฌดํ•œ๋Œ€
    console.log(typeof Infinity); // number

  • NaN : ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ(Not-a-Number)๋ผ๋Š” ์ˆซ์ž๊ฐ’ NaN์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    console.log(window.NaN);    // NaN
    console.log(Number('xyz')); // NaN
    console.log(1*'str');       // NaN
    console.log(typeof NaN);    // Number

  • undefined : ์›์‹œ ๊ฐ’์ธ undefined๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    console.log(window.undefined);  // undefined
    var foo;
    console.log(foo);               // undefined
    console.log(typeof undefined);  // undefined

๋นŒํŠธ์ธ ์ „์—ญ ํ•จ์ˆ˜

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒํŠธ์ธ ํ•จ์ˆ˜๋กœ์„œ ์ „์—ญ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

  • eval : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›๊ณ  ์ด๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    eval('1 + 2;');     // 3
    eval('var x = 5;'); // undefined
    console.log(x);     // 5
    
    // ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์€ ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    const o = eval('({ a: 1 })');
    console.log(o);     // { a: 1 }
    
    // ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์€ ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    const f = eval('(function() { return 1; })');
    console.log(f());   // 1
    • ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”! ์ตœ์ ํ™”๊ฐ€ ์ง„ํ–‰๋˜์ง€ ์•Š์•„ ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ , ๋Ÿฐํƒ€์ž„์— ํ‰๊ฐ€ํ•˜์—ฌ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ๋ณ€์กฐ์˜ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • isFinite : ์ „๋‹ฌ๋ฐ›์€ ์ธ์ˆ˜๊ฐ€ ์ •์ƒ์ ์ธ ์œ ํ•œ์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ์œ ํ•œ์ˆ˜์ด๋ฉด true, ๋ฌดํ•œ์ˆ˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    console.log(isFinite(0));         // true
    console.log(isFinite('10'));      // true
    console.log(isFinite(Infinity));  // false

  • isNaN : ์ „๋‹ฌ๋ฐ›์€ ์ธ์ˆ˜๊ฐ€ NaN์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    console.log(isNaN(NaN));                    // true
    console.log(isNaN(10));                     // false
    console.log(isNaN(new Date()));             // false
    console.log(isNaN(new Date().toString()));  // true

  • parseFloat : ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž, ์ฆ‰ ์‹ค์ˆ˜๋กœ ํ•ด์„ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    console.log(parseFloat('3.14'));      // 3.14
    console.log(parseFloat('10.00'));     // 10
    console.log(parseFloat('34 45 66'));  // 34
    • ๊ณต๋ฐฑ ๊ตฌ๋ถ„ ๋ฌธ์ž์—ด์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—ด๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • parseInt : ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ์ •์ˆ˜๋กœ ํ•ด์„ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    console.log(parseFloat('10'));      // 10
    console.log(parseFloat('10.123'));  // 10

์•„๋ž˜ ํ•จ์ˆ˜๋“ค์„ ์•Œ์•„๋ณด๊ธฐ ์•ž์„œ URI์™€ ์ธ์ฝ”๋”ฉ์— ๋Œ€ํ•ด ๊ฐ„๋žต์ ์œผ๋กœ ์•Œ์•„๋ณผ๊นŒ์š”?

URI๋Š” ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ํ•˜๋Š” URI์˜ ํ•˜์œ„ ๊ฐœ๋…์œผ๋กœ URL, URN์ด ์žˆ์ฃ .

์ธ์ฝ”๋”ฉ(Encoding)์ด๋ž€ URI ๋ฌธ์ž๋“ค์„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ๋กœ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์–ด๋–ค ์‹œ์Šคํ…œ์—์„œ๋„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์•„์Šคํ‚ค ๋ฌธ์ž ์…‹(ASCII Character set)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฑฐ์ฃ . ํ•œ๊ธ€์„ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ์™ธ๊ตญ์–ด๋‚˜ ํŠน์ˆ˜ ๋ฌธ์ž์˜ ๊ฒฝ์šฐ URL์— ํฌํ•จ๋  ์ˆ˜ ์—†๊ธฐ์— ์ด๋ฅผ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ํ•จ์ˆ˜๋Š” ๋ญ˜๊นŒ์š”?


  • encodeURI/decodeURI : ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด์„ ์™„์ „ํ•œ URI๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๊ตฌ๋ถ„์ž =, ?, &๋Š” ์ธ์ฝ”๋”ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    1. encodeURI๋Š” URI๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ๋ฐ›์•„ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    2. decodeURI๋Š” ์ธ์ฝ”๋”ฉ๋œ URI๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    const url = 'http://localhost:8080/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ/๊ณต๋ถ€๋ฅผ์œ„ํ•œ/์ €์žฅ์†Œ/FECrash';
    const encUrl = encodeURI(url);
    console.log(encodeURI(url));
    console.log(decodeURI(encUrl));

  • encodeURIComponent/decodeURIComponent : URI์˜ ๊ตฌ์„ฑ ์š”์†Œ์ธ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•˜์—ฌ =, ?, &๊นŒ์ง€ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    1. encodeURIComponent ํ•จ์ˆ˜๋Š” URI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    2. decodeURIComponent ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ๋œ URI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋””์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.

์•”๋ฌต์  ์ „์—ญ

strict mode ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.