๋ฐ˜์‘ํ˜•

value๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ํ•ด๋‹นํ•˜๋Š” ํƒ€์ž… ์ด๋ฆ„(์†Œ๋ฌธ์ž)์„ ๋ฐ˜ํ™˜ํ•˜๋Š” getType ํ•จ์ˆ˜. ํ”„๋กœ์ ํŠธ ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด๋‘๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

const getType = (value: any) => {
  if (value === undefined) return 'undefined';
  if (value === null) return 'null';
  return value.constructor.name.toLowerCase();
};

getType(8); // 'number'
getType([8]); // 'array'
getType(() => {}); // 'function'
getType('8'); // 'string'
getType({ id: 8 }); // 'object'
getType(new Set()); // 'set'
getType(new Map()); // 'map'
getType(true); // 'boolean'

 

๐Ÿ’ก ๋ฐฐ์—ด, ๊ฐ์ฒด, ์ˆซ์ž, ๋ฌธ์ž์—ด ๋“ฑ ๋ชจ๋‘ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์Šคํ„ด์Šค๋Š” ์ž์‹ ์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์— ์žˆ๋Š” constructor ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํƒ€์ž… ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๋Š” ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. Array, Number, String ๋“ฑ ๊ฐ ํƒ€์ž…์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” name ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ(typeof ์—ฐ์‚ฐ์ž๋„ ์†Œ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค). undefined์™€ null์€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ณ„๋„ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

const num = 10
console.log(num.constructor === Number) // true
console.dir(Number) // ์•„๋ž˜ ์ด๋ฏธ์ง€ ์ฐธ๊ณ 

console.log(Number.name) // 'Number'
console.log(Array.name) // 'Array'
console.log(Object.name) // 'Object'
console.log(Function.name) // 'Function'
console.log(Error.name) // 'Error'
console.log(Date.name) // 'Date'
// ...

 

๊ฐ ํƒ€์ž…์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” name ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„๋‹ค

์ฐธ๊ณ ๋กœ null, ๋ฐฐ์—ด, ๊ฐ์ฒด๋ฅผ typeof ์—ฐ์‚ฐ์ž๋กœ ๊ฒ€์‚ฌํ•ด๋ณด๋ฉด ๋ชจ๋‘ 'object'๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

typeof null; // 'object'
typeof {}; // 'object'
typeof []; // 'object'

typeof undefined; // 'undefined'
typeof NaN; // 'number'

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•