ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

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

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌ๊ฒŒ 3๊ฐœ์˜ ๊ฐ์ฒด๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ข…๋ฅ˜ ์„ค๋ช…
ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด - ESMAScript ์‚ฌ์–‘์— ์ •์˜๋œ ๊ฐ์ฒด
- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ œ๊ณต
- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๊ด€๊ณ„์—†์ด ์–ธ์ œ๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ์„œ ์ œ๊ณต๋จ
- ๋ณ„๋„์˜ ์„ ์–ธ ์—†์ด ์ „์—ญ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์–ธ์ œ๋‚˜ ์ฐธ์กฐ ๊ฐ€๋Šฅ
ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด - ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด (ESMAScript ์‚ฌ์–‘์— ์ •์˜๋œ ๊ฐ์ฒดX)
- ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ : *ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ Web API๋ฅผ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋กœ ์ œ๊ณต
- Node.js ํ™˜๊ฒฝ : ๊ณ ์œ ์˜ API๋ฅผ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋กœ ์ œ๊ณต
์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด - ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ๊ฐ์ฒด (ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์™€ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด์ฒ˜๋Ÿผ ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” ๊ฐ์ฒดX)

 

*ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ Web API : DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Strorage, Web Component, Web Worker 


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

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

  • Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, Json, Error ๋“ฑ

์ด์ค‘ Math, Reflect, Json์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ‘œ์ค€ ๋นŒ๋“œ์ธ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ ์ •์  ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (Math, Reflect, Json์€ ์ •์  ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณต)

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์ธ String๊ณผ Number๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// String ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ String ๊ฐ์ฒด ์ƒ์„ฑ
const strObj = new String('Lee'); // String {"Lee"}
console.log(typeof strObj); // object

// String ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•œ strObj ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž…์€ String.prototype
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true

// Number ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ Number ๊ฐ์ฒด ์ƒ์„ฑ
const numObj = new Number(1.5); // Number {1.5}
console.log(typeof numObj); // object

// toFixed๋Š” Number.prototype์˜ ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ
// Number.prototype์˜.toFixed๋Š” ์†Œ์ˆ˜์  ์ž๋ฆฌ๋ฅผ ๋ฐ˜์˜ฌ๋ฆผํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜
console.log(numObj.toFixed()); // 2

// isInteger๋Š” Number์˜ ์ •์  ๋ฉ”์„œ๋“œ
// Number.isInteger๋Š” ์ธ์ˆ˜๊ฐ€ ์ •์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ Boolean์œผ๋กœ ๋ฐ˜ํ™˜
console.log(numObj.isInteger(0.5)); // false
  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ธ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด(String, Number)๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์€ ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์˜ prototype ํ”„๋กœํผํ‹ฐ์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์˜ ๋นŒํŠธ์ธ ํ”„๋กœํฌํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต
  • ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด๋Š” ์ธ์Šคํ„ด์Šค ์—†์ด๋„ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ๋นŒํŠธ์ธ ์ •์  ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต(Number.isInteger)

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

์›์‹œ๊ฐ’์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์•”๋ฌต์ ์œผ๋กœ ์—ฐ๊ด€๋œ ๊ฐ์ฒด์ธ *๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋กœ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‹ค์‹œ ์›์‹œ๊ฐ’์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.

 

*๋ž˜ํผ ๊ฐ์ฒด : ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ์ฒด์ฒ˜๋Ÿผ ์ ‘๊ทผํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ์ž„์‹œ ๊ฐ์ฒด

 

const str = 'hi';

// ์›์‹œ ํƒ€์ž…์ธ ๋ฌธ์ž์—ด์ด ๋ž˜ํผ ๊ฐ์ฒด์ธ String ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€ํ™˜
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI

// ๋ž˜ํผ ๊ฐ์ฒด๋กœ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค, ๋‹ค์‹œ ์›์‹œ๊ฐ’์œผ๋กœ ๋˜๋Œ๋ฆผ
console.log(typeof str); // string
  • ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๊ทธ ์ˆœ๊ฐ„ ๋ž˜ํผ ๊ฐ์ฒด์ธ String ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋ฌธ์ž์—ด์€ ๋ž˜ํผ ๊ฐ์ฒด์˜ [[StringData]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์— ํ• ๋‹น๋จ
  • ๋ฌธ์ž์—ด ๋ž˜ํผ ๊ฐ์ฒด์ธ String ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๋Š” String.prototype์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ž˜ํผ ๊ฐ์ฒด์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ž˜ํผ ๊ฐ์ฒด์˜ [[StringData]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์— ํ• ๋‹น๋œ ์›์‹œ๊ฐ’์ธ ์›๋ž˜์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ณ  ๋ž˜ํผ ๊ฐ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋Œ€์ƒ์ด๋จ

 

์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๋“ฑ์˜ ์›์‹œ๊ฐ’์ด ์žˆ๋Š”๋ฐ๋„ ์ž์—ด, ์ˆซ์ž, ๋ถˆ๋ฆฌ์–ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” String, Number, Boolean ๋“ฑ์˜ ํ‘œ์ค€ ๋นŒํŠธ์ธ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

** null๊ณผ undefined๋Š” ๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Œ


์ „์—ญ ๊ฐ์ฒด

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

 

์ „์—ญ ๊ฐ์ฒด ์„ค๋ช…
window  ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์˜ ์ „์—ญ ๊ฐ์ฒด
global  Node.js ํ™˜๊ฒฝ์˜ ์ „์—ญ ๊ฐ์ฒด
globalThis  ES11์—์„œ ๋„์ž…๋œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ๊ณผ Node.js ํ™˜๊ฒฝ์˜ ํ†ตํ•ฉ ์ „์—ญ ๊ฐ์ฒด

 

์ „์—ญ ๊ฐ์ฒด์˜ ํŠน์ง•

  • ์ „์—ญ ๊ฐ์ฒด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ (์ „์—ญ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ œ๊ณตX)
  • ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ window(๋˜๋Š” global)๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Œ
  • ํ‘œ์ค€ ๋นŒํŠธ์ธ ๊ฐ์ฒด์™€ ํ˜ธ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ์†Œ์œ ํ•จ
  • var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜, ์•”๋ฌต์  ์ „์—ญ, ์ „์—ญํ•จ์ˆ˜๋Š” ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ

 

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

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

  • Infinity : ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’ Infinity๋ฅผ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ
  • NaN : ์ˆซ์ž๊ฐ€ ์•„๋‹˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๊ฐ’ NaN์„ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ
  • undefined : ์›์‹œ ํƒ€์ž… undefined๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ

 

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

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

  • eval
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋‚˜ํƒœ๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ํ‘œํ˜„์‹์ด๋ผ๋ฉด ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ  ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ์ด๋ผ๋ฉด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ (๋Ÿฐํƒ€์ž„์— ํ‰๊ฐ€ํ•˜์—ฌ ์ƒ์„ฑ/์‹คํ–‰)
    • ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ๋ฌธ์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜
    • ์ž์‹ ์˜ ํ˜ธ์ถœ๋œ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ์กด์˜ ์Šค์ฝ”ํ”„๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์ˆ˜์ • (strict mode์—์„œ๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ž์ฒด์ ์ธ ์Šค์ฝ”ํ”„๋ฅผ ์ƒ์„ฑ. let, const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•”๋ฌต์ ์œผ๋กœ strict mode๊ฐ€๋จ)
    • ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜๊ณ  ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด์„œ ์‚ฌ์šฉ X
// 1. ํ‘œํ˜„์‹์ธ ๋ฌธ
eval('1 + 2;'); // 3

// 2. ํ‘œํ˜„์‹์ด ์•„๋‹Œ ๋ฌธ
eval('var x = 5;'); // undefined

// eval ํ•จ์ˆ˜์— ์˜ํ•ด ๋Ÿฐํƒ€์ž„์— ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์‹คํ–‰๋˜์–ด x ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋จ
console.log(x); // 5

// 3. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์€ ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์Œˆ
const o = eval('({ a: 1 })');
console.log(o); // {a: 1}

// 4. ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์€ ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์Œˆ
const f = eval('(function() { return 1; })');
console.log(f()); // 1

// 5. ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜
eval('1 + 2; 3 + 4;'); // 7

// 6. ๊ธฐ์กด์˜ ์Šค์ฝ”ํ”„๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์ˆ˜์ •
const x = 1;

function foo() {
    // eval ํ•จ์ˆ˜๋Š” ๋Ÿฐํƒ€์ž„์— foo ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •
    eval('var 2 = 2;');
    console.log(x); // 2
}

foo();
console.log(x); // 1

 

  • isFinite : ์ „๋‹ฌ๋ฐ›์€ ์ธ์ˆ˜๊ฐ€ ์ •์ƒ์ ์ธ ์œ ํ•œ์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜์—ฌ ์œ ํ•œ์ˆ˜๋ฉด true๋ฅผ, ๋ฌดํ•œ์ˆ˜๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
isFinite(0); // true
isFinite(2e64); // true
isFinite('10'); // true : '10' -> 10
isFinite(null); // true : null -> 0

isFinite(Infinity); // false
isFinite(-Infinity); // false
isFinite(NaN); // false

 

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

isNaN('blabla'); // true : 'blabla' -> NaN
isNaN('10'); // false : '10' -> 10
isNaN(''); // false : '' -> 0
isNaN(' '); // false : ' ' -> 0

isNaN(true); // false : true -> 1
isNaN(null); // false : null -> 0

isNaN(undefined); // true : undefined -> NaN

isNaN({}); // true : {} -> NaN

isNaN(new Date()); // false : new Date() -> Number
isNaN(new Date().toString()); // true : String -> NaN

 

  • parseFloat : ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž(์‹ค์ˆ˜)๋กœ ํ•ด์„ํ•˜์—ฌ ๋ฐ˜ํ™˜
parseFloat('3.14'); // 4.14
parseFloat('10.00'); // 10

parseFloat('34 45 56'); // 34
parseFloat('40 years'); // 40

parseFloat('He was 40'); // NaN

parseFloat(' 70 '); // 70

 

  • parseInt : ์ „๋‹ฌ๋ฐ›์€ ๋ฌธ์ž์—ด ์ธ์ˆ˜๋ฅผ ์ •์ˆ˜๋กœ ํ•ด์„ํ•˜์—ฌ ๋ฐ˜ํ™˜ 
parseInt('10'); // 10
parseInt('10.12'); // 10

parseInt(10); // 10
parseInt(10.12); // 10

// 2์ง„์ˆ˜๋กœ ํ•ด์„ํ•ด์„œ 10์ง„์ˆ˜ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜ 
parseInt('10', 2); // 2

// 8์ง„์ˆ˜๋กœ ํ•ด์„ํ•ด์„œ 10์ง„์ˆ˜ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜ 
parseInt('10', 8); // 8

// 16์ง„์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด '0xf'๋ฅผ 16์ง„์ˆ˜๋กœ ํ•ด์„ํ•ด์„œ 10์ง„์ˆ˜ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜ (2, 8์ง„์ˆ˜๋Š” ๋ถˆ๊ฐ€๋Šฅ)
parseInt('0xf'); // 15
parseInt('f', 16); // 15

parseInt('A0'); // NaN
parseInt('1A0'); // 1

parseInt('10 20'); // 10

 

  • encodeURI / decodeURI 
    • encodeURI : ์™„์ „ํ•œ URI(Unifom Resource Identifier)๋ฅผ ๋ฌธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์•„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ธ์ฝ”๋”ฉ
    • decodeURI : ์ธ์ฝ”๋”ฉ๋œ URI๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌ ์ด์ „์œผ๋กœ ๋””์ฝ”๋”ฉ
    • encodeURI๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด์„ ์™„์ „ํ•œ URI ์ „์ฒด๋ผ๊ณ  ๊ฐ„์ฃผํ•˜์—ฌ =, ?, &์€ ์ธ์ฝ”๋”ฉX

// ์™„์ „ํ•œ URI
const uri = 'http://example.com?name=์ด๋ฆ„&job=programmer&teacher';

const enc = encodeURI(uri);
console.log(enc);
// http://example.com?name=%EC%9D%B4%EB%A6%84&job=programmer&teacher

const dec = decodeURI(enc);
console.log(dec);
// http://example.com?name=์ด๋ฆ„&job=programmer&teacher

 

 

  • encodeURIComponent / decodeURIComponent
    • encodeURIComponent  : URI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ์ธ์ฝ”๋”ฉ
    • decodeURIComponent : ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ URI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋””์ฝ”๋”ฉ
    • encodeURIComponent๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด์„ URI ๊ตฌ์„ฑ์š”์†Œ์ธ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•ด์„œ =, ?, &๊นŒ์ง€ ์ธ์ฝ”๋”ฉ
const uriComp = 'name=์ด๋ฆ„&jop=programmer&teacher';

let enc = encodeURIComponent(uriComp);
console.log(enc);
// name%3D%EC%9D%B4%EB%A6%84%26jop%3Dprogrammer%26teacher

let dec = decodeURIComponent(enc);
console.log(dec);
// name=์ด๋ฆ„&jop=programmer&teacher

enc = encodeURI(uriComp);
console.log(enc);
// name=%EC%9D%B4%EB%A6%84&jop=programmer&teacher

dec = encodeURI(enc);
console.log(dec);
// name=์ด๋ฆ„&jop=programmer&teacher

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

์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž๊ฐ€ ๋งˆ์น˜ ์„ ์–ธ๋œ ์ „์—ญ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

console.log(x); // 10
console.log(y); // ReferenceError

var x = 10; // ์ „์—ญ ๋ณ€์ˆ˜

function foo () {
    // ์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž์— ๊ฐ’์„ ํ• ๋‹น
    y = 20; // window.y = 20;
}
foo();

// ์„ ์–ธํ•˜์ง€ ์•Š์€ ์‹๋ณ„์ž y๋ฅผ ์ „์—ญ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ
console.log(x + y); // 30

console.log(window.x); // 10
console.log(window.y); // 20

delete x; // ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์‚ญ์ œX
delete y; // ํ”„๋กœํผํ‹ฐ๋Š” ์‚ญ์ œO

console.log(window.x); // 10
console.log(window.y); // undefined
  • foo ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ y ๋ณ€์ˆ˜์— ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ํ†ตํ•ด ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ธ์ง€ ํ™•์ธ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ฆŒ์€ y = 20์„ window.y = 20์œผ๋กœ ํ•ด์„ํ•˜์—ฌ ์ „์—ญ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ
  • y๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ์—†์ด ๋‹จ์ง€ ์ „์—ญ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋ฟ์ด๋ผ y๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒX
  • ํ”„๋กœํผํ‹ฐ์ธ y๋Š” delete์—ฐ์‚ฐ์ž๋กœ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅ

[์ถœ์ฒ˜] ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

https://wikibook.co.kr/mjs/

 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ

269๊ฐœ์˜ ๊ทธ๋ฆผ๊ณผ ์›๋ฆฌ๋ฅผ ํŒŒํ—ค์น˜๋Š” ์„ค๋ช…์œผ๋กœ ‘์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ’๋ฅผ ์ดํ•ดํ•˜์ž! ์›นํŽ˜์ด์ง€์˜ ๋‹จ์ˆœํ•œ ๋ณด์กฐ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ œํ•œ์ ์ธ ์šฉ๋„๋กœ ํƒœ์–ด๋‚œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ณผ๋„

wikibook.co.kr