๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

javascript/ํด๋ฆฐ์ฝ”๋“œ

[JS] ํด๋ฆฐ์ฝ”๋“œ - ํƒ€์ž… ๊ฒ€์‚ฌํ•˜๊ธฐ(typeof, instanceof, Object.prototype)

728x90

typeof, instanceof, Object.prototype์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๊ธฐ ์ „์— 

JS์˜ ํƒ€์ž…๋“ค์„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด์ž!

 

JS ํƒ€์ž…

PRIMITIVE(์›์‹œ๊ฐ’) vs REFERENCE(์ž๋ฃŒํ˜• ๊ฐ์ฒด)

PRIMITIVE(์›์‹œ๊ฐ’)   REFERENCE(์ž๋ฃŒํ˜• ๊ฐ์ฒด)
string, boolean, number.. Array, function, Date, String...

๊ทธ๋ ‡๋‹ค๋ฉด ํƒ€์ž… ๊ฒ€์‚ฌํ• ๋•Œ 'typeof'๋กœ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์„๊นŒ? NO!

 

REFERENCE(์ž๋ฃŒํ˜• ๊ฐ์ฒด)๋Š” 'typeof'๋กœ ๊ฐ„๋ณ„ํ•ด๋‚ด๊ธฐ ์–ด๋ ต๋‹ค. 

์™œ๋ƒ๋ฉด, JS๋Š” ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ์–ธ์–ด๋กœ, ํƒ€์ž…๋„ ๋™์ ์œผ๋กœ ๋ณ€ํ™”ํ•˜๊ธฐ๋•Œ๋ฌธ์ด๋‹ค.

// ์ด๋ฒˆ ์ฝ”๋“œ์—์„œ console.log()๋ฅผ ์ƒ๋žตํ–ˆ๋‹ค.
function a(){}
class b{}

typeof a //function
typeof b //function -> b๋Š” class๊ฐ€ ์ •๋‹ต์ž„. ์ž˜๋ชป ๊ฐ„๋ณ„ํ•จ.

 

๋˜ํ•œ 'typeof'๋Š” Wrapper๊ฐ์ฒด๋„ ๊ฐ„๋ณ„ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

const str = new String('๋จ€')
typeof str //object -> str์€ String์ž„. ์ž˜๋ชป ๊ฐ„๋ณ„ํ•จ.

๋”๋ถˆ์–ด js์—์„œ ์ธ์ •ํ•˜๋Š” ์–ธ์–ด์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋ฐ”๋กœ ๊ทธ๊ฑด << 'typeof'์—์„œ null์„ object๋กœ ์ธ์‹ํ•˜๋Š” ๊ฒƒ >>

console.log(typeof null) // object

 

 

๊ทธ๋ ‡๋‹ค๋ฉด 'instanceof'๋Š” ์–ด๋–จ๊นŒ?

'instanceof': ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ๊ฒ€์‚ฌํ•œ๋‹ค. (์ฆ‰ Parent๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.)

unction Pet(name,age){
    this.name=name;
    this.age=age;
}

const cat=new Pet('๋ฃจํ‚ค',2)

const c={
    name:'test',
    age:1
}
cat instanceof Pet //true
c instanceof Pet //false

์œ„์˜ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด instanceof๋กœ REFERENCE ๊ฐ์ฒด๋ฅผ ์ œ๋Œ€๋กœ ๊ฐ„๋ณ„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ,

ํ•จ์ •์ด ์žˆ๋‹ค!

<< ๋ชจ๋“  REFERENCE์˜ Parent๋Š” Object>> ๋ผ๋Š” ์ ์ด๋‹ค.

const arr=[]
const func=function(){}
const date=new Date()

arr instanceof Array //true
func instanceof Function //true
date instanceof Date //true

// ์ตœ์ƒ์œ„๋Š” Object๊ฐ€ ์žˆ๊ธฐ๋•Œ๋ฌธ์— type์„ ๊ตฌ๋ณ„ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ์Œ
arr instanceof Object //true
func instanceof Object //true
date instanceof Object //true

 

์šฐ๋ฆฌ๊ฐ€ REFERNCE๋ฅผ ๊ฐ„๋ณ„ํ•ด๋‚ด๊ธฐ ์œ„ํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€!

Object๊ฐ€ ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ตœ์ƒ์œ„ ๊ฐ์ฒด์ž„์„ ํ™œ์šฉํ•ด์„œ Object.prototype์„ ์ด์šฉํ•ด์„œ ๊ฐ„๋ณ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

Object.prototype.toString.call(arr) // object Array
Object.prototype.toString.call(func) // object Function
Object.prototype.toString.call(date)) // object Date
728x90