[js] hasOwnProperty vs in ์ฐจ์ด
์์ ๊ฐ์
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๋ฅผ ์ฌ์ฉ
- ์ด๋ฌํ ์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ๋กํ ํ์
์์ ๊ตฌ์กฐ๊ฐ ๋ช
ํํ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋ ๋งค์ฐ ์ค์