TIL

[2024/01/30] JavaScript 객체의 hasOwnProperty

hongod 2024. 2. 4. 13:17

 오늘 다른 분이 옛날에 작성한 FE 코드를 읽다가 객체 prpoerty 순회할 대 hasOwnProperty라는 걸 사용하는 부분을 봤다. 메서드 이름으로 대충 "property가 있는가 검사하는 것이 겠구나" 추측은 했는데 이미 존재하는걸 아는데 왜 한 번 더 체크하는걸까? 싶어서 찾아봤다. 

 

MDN 문서 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

 

Object.prototype.hasOwnProperty() - JavaScript | MDN

The hasOwnProperty() method of Object instances returns a boolean indicating whether this object has the specified property as its own property (as opposed to inheriting it).

developer.mozilla.org

 

 객체가 property 를 가지는지 검사를 하는건 맞는데, 상속한게 아니라 진짜 그 객체에 선언된 것인지 확인하는 메서드라고 한다. prototype chain으로 상속받은 property는 검사안하고, 진짜 객체 그 자체에 선언한 것만 확인하는 것. 주의할 점은, 존재 유무만 판단하는 것이지 value는 안따지기 때문에, property 값이 null이나 undefined여도 property자체가 선언돼있기만 하면 true를 반환한다. 많은 경우 사용하지 않아도 당장 문제는 생기지 않지만, 상위 객체의 프로토타입에 어떤 변화가 생길지 확신할 수 없기 때문에 거의 항상 사용하는 것이 권장되는 것으로 보인다. 또한 hasOwnProperty를 사용하는 것 만으로 "prototype chain은 고려 안할게요~" 라는 의미를 담을 수 있기 때문에 코드의 가독성도 좋아진다!

 

참고 출처 : https://mygumi.tistory.com/330