๐Ÿ“‚ DevNote

[js] hasOwnProperty vs in ์ฐจ์ด

_bread 2024. 4. 24. 15:23

์ž‘์—…๊ฐœ์š”

component์— ํฉ์–ด์ ธ ์žˆ๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์„
app.component ์ „์—ญ์—์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๊ฐ€์šด๋ฐ ๊ฐ component์— ์กฐ๊ฑด์— ๋งž๋Š” ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด in ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ๊ฐ„์— in๋ณด๋‹ค๋Š”
hasOwnProperty๊ฐ€ ๋” ๋งŽ์ด ์“ฐ์ด๊ณ 
์ด ๊ฒฝ์šฐ์— ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋“ค์–ด ์กฐ์‚ฌํ•˜๋˜ ์ค‘
์–ผํ• ๋ณด๊ณ  ์ง€๋‚˜๊ฐ”์„ ๋•Œ๋Š” ์ด๊ฒŒ ๋ญ๊ฐ€ ๋‹ฌ๋ผ? ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐ”์ง€๋งŒ ๋‹ค์‹œ ํ™•์ธํ•ด ๋ณด๋‹ˆ ์ฐจ์ด์ ์ด ์žˆ์–ด ๊ธฐ๋ก์— ๋‚จ๊ธด๋‹ค.
 
 

'in' Operator

์—ฐ์‚ฐ์ž in๋Š” ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์–ด๋”˜๊ฐ€์— ์†์„ฑ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
์ด๋Š” ์ž์‹ ์˜ ์†์„ฑ๊ณผ ์ƒ์†๋œ ์†์„ฑ์„ ๋ชจ๋‘ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธ
hasOwnProperty์™€์˜ ์ฐจ์ด์ ์€
prototype chain์„ ๋”ฐ๋ผ ์˜ฌ๋ผ๊ฐ€ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ํ”„๋Ÿฌํผํ‹ฐ ๊นŒ์ง€ ์กฐํšŒํ•˜๋Š” ํŠน์ง•
 

'hasownproperty' Method

'hasOwnProperty'์—์„œ ๋‚˜์˜จ ๋ฐฉ๋ฒ• 'Object.prototype'
์†์„ฑ์ด ๊ฐ์ฒด์˜ ์ง์ ‘์ ์ธ ์†์„ฑ ์œผ๋กœ ์กด์žฌํ•˜๋Š”์ง€(์ฆ‰, ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์—์„œ ์ƒ์†๋˜์ง€ ์•Š์€์ง€) ํ™•์ธํ•œ๋‹ค
์ผ๋ฐ˜์ ์œผ๋กœ ์†์„ฑ ์ด๋ฆ„์ด ์‹ค์ œ๋กœ ๊ฐœ์ฒด์˜ ๊ตฌ์„ฑ์›์ธ์ง€ ๋˜๋Š”
ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์—์„œ ๋ฐœ๊ฒฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด object.hasOwnProperty(๋ณ€์ˆ˜) ์‚ฌ์šฉ
 
 
(์˜ˆ์‹œ)

// Base object
let vehicle = {
  wheels: 4
};

// Derived object
let car = Object.create(vehicle);
car.engine = 'V8';
car.doors = 4;

// hasOwnProperty checks
console.log(car.hasOwnProperty('engine'));  // true
console.log(car.hasOwnProperty('wheels'));  // false

// 'in' operator checks
console.log('engine' in car);  // true
console.log('wheels' in car);  // true

 
in ์—ฐ์‚ฐ์ž
- 'engine' in car ์ž๋™์ฐจ์˜ ์ง์ ‘์ ์ธ ์†์„ฑ์œผ๋กœ
์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— true ๋ฐ˜ํ™˜
- 'wheels' in car ๋˜ํ•œ true๋ฅผ ๋ฐ˜ํ™˜
'wheels'์€ ์ž๋™์ฐจ์˜ ์ง์ ‘์ ์ธ ์†์„ฑ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ž๋™์ฐจ๊ฐ€ ์กฐ์ƒ์ธ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ

hasOwnProperty
- car.hasOwnProperty('engine')์€ 'engine'์ด 
์ž๋™์ฐจ ๊ฐ์ฒด์˜ ์ง์ ‘์ ์ธ ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— true ๋ฐ˜ํ™˜
- car.hasOwnProperty('wheels')์€ 
'wheels'๊ฐ€ ์ฐจ๋Ÿ‰ ๊ฐœ์ฒด๋กœ๋ถ€ํ„ฐ ์ƒ์†๋˜๊ธฐ ๋•Œ๋ฌธ์— false ๋ฐ˜ํ™˜
(์ฆ‰, ์ž๋™์ฐจ์˜ ๊ณ ์œ  ์†์„ฑ์ด ์•„๋‹˜)
 
 
 

๊ฒฐ๋ก 

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