Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

고리타분한 개발자

객체 (Objects) - hasOwnProperty 본문

JavaScript/Garden

객체 (Objects) - hasOwnProperty

sunlee334 2017. 11. 8. 01:35

hasownProperty 메소드를 사용하여, 어떤 객체의 프로퍼티가 자기 자신의 프로퍼티인지 아니면 프로토타입 체인에 있는 것인지 확인할 수 있습니다. 그리고, 이 메소드는 Object.prototype으로 부터 상속받아 모든 객체가 가지고 있습니다.


hasOwnProperty 메소드는 프로토타입 체인을 탐색하지 않고 프로퍼티를 다룰수있는 유일한 방법입니다.

 

// Object.prototype을 오염시킨다.
Object.prototype.monkey = 10;
var animal = { dog: undefined };

animal.monkey; // 10
'monkey' in animal; // true

animal.hasOwnProperty('monkey'); // false
animal.hasOwnProperty('dog'); // true


hasOwnProperty 메소드는 어떤 프로퍼티가 자기 자신의 프로퍼티인지 아닌지 정확히 알려주기 때문에 객체의 프로퍼티를 순회할 때 꼭 필요합니다. 그리고, 프로토타입 체인 어딘가에 정의된 프로퍼티만을 제외하는 방법은 없습니다.


hasOwnProperty 메소드도 프로퍼티이다

Javascript는 hasOwnProperty라는 이름으로 프로퍼티를 덮어 쓸수도 있습니다. 그래서, 객체 안에 같은 이름으로 정의된 hasOwnProperty가 있을 경우, 본래 hasOwnProperty의 값을 정확하게 얻고 싶다면 다른 객체의 hasOwnProperty 메소드를 빌려써야 합니다.

var animal = {
hasOwnProperty: function () {
return false;
},
monkey: 'Here be dragons'
};

animal.hasOwnProperty('monkey'); // 항상 false를 반환한다.

// 다른 객체의 hasOwnProperty를 사용하여 animal 객체의 프로퍼티 유무를 확인합니다.
({}).hasOwnProperty.call(animal, 'monkey'); // true

// Object에 있는 hasOwnProperty를 사용해도 됩니다.
Object.prototype.hasOwnProperty.call(obj, 'monkey'); // true


결론

hasOwnProperty 메소드는 어떤 프로퍼티가 존재하는지 확인할 수는 있지만,, 그 값이 undefined일 수도 있기 때문에 어떤 프로퍼티의 값이 undefined인지 확인 하는 용도로 사용하긴 어렵습니다. 어떤 객체에 원하는 프로퍼티가 있는지 확인하는 가장 확실한 방법은 hasOwnProperty를 사용하는 것입니다. for in loop에서 네이티브 객체에서 확장된 프로퍼티를 제외하고 순회하려면 hasOwnProperty와 함깨 사용하면 좋습니다.


License

이 게시글은 JavaScript Garden을 참고하여 작성 되었습니다. (https://github.com/BonsaiDen/JavaScript-Garden)

Comments