JavaScript ES2022: Object.hasOwn으로 프로토타입 체인으로부터 안전하게 자체 속성 확인하기
🤖 AI 추천
JavaScript 개발자라면 누구나, 특히 프로토타입 기반 상속으로 인한 잠재적 문제를 피하고 코드의 안정성과 가독성을 높이고자 하는 프론트엔드 및 백엔드 개발자에게 이 콘텐츠를 추천합니다.
🔖 주요 키워드

핵심 기술
ES2022 표준에 도입된 Object.hasOwn
메서드는 객체가 프로토타입 체인으로부터 상속받지 않은 자체 속성을 가지고 있는지 안전하고 간결하게 확인할 수 있는 새로운 방법을 제공합니다.
기술적 세부사항
- 문제점: 전통적인
obj.hasOwnProperty(key)
방식은obj
자체가hasOwnProperty
메서드를 재정의(shadowing)하거나 삭제한 경우 오작동할 수 있습니다. - 안전한 전통적 방식:
Object.prototype.hasOwnProperty.call(obj, key)
는 이러한 문제를 해결하지만, 구문이 장황하고 반복적입니다. Object.hasOwn
소개: ES2022에서 추가된 정적 메서드로,Object.hasOwn(obj, prop)
형태로 사용됩니다.obj
는 대상 객체,prop
은 확인할 속성 키(문자열 또는 심볼)입니다.- 동작 방식:
obj
가prop
이라는 자체 속성을 가지고 있으면true
, 그렇지 않으면false
를 반환합니다. 상속된 속성은false
로 간주합니다. - 예제:
const user = { name: "Alice" }; Object.hasOwn(user, "name"); // true
,Object.hasOwn(user, "toString"); // false
- 폴리필: 구형 환경을 지원하기 위해
if (!Object.hasOwn) { Object.hasOwn = function(...) {...} }
와 같은 폴리필을 제공합니다. - 성능:
Object.hasOwn
은 내부적으로hasOwnProperty
와 동일한 알고리즘을 사용하며, 성능 차이는 무시할 만합니다.
개발 임팩트
Object.hasOwn
도입으로 코드의 가독성과 안정성이 향상됩니다. 개발자는 프로토타입 체인 관련 잠재적 오류를 더 쉽게 방지하고, 명확하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.
커뮤니티 반응
톤앤매너
Object.hasOwn
은 JavaScript 객체 속성 검사의 안전성과 표현력을 크게 향상시키는 현대적인 기능입니다. 개발자는 이 메서드를 적극적으로 채택하고, 필요시 폴리필을 적용하여 코드의 견고성을 높이는 것이 권장됩니다. in
연산자와의 차이점을 명확히 인지하고, 자체 속성 검사가 필요할 때는 Object.hasOwn
을 사용하는 것이 좋습니다.
📚 관련 자료
v8
JavaScript 엔진인 V8은 ES2022 기능을 구현하는 데 핵심적인 역할을 합니다. `Object.hasOwn`과 같은 새로운 표준 기능의 구현 및 최적화는 V8 프로젝트에서 이루어집니다.
관련도: 90%
core-js
ECMAScript 표준의 많은 부분을 지원하는 폴리필 라이브러리로, `Object.hasOwn`과 같은 최신 기능에 대한 폴리필을 제공하여 구형 브라우저 및 Node.js 환경에서도 해당 기능을 사용할 수 있도록 합니다.
관련도: 95%
mdn-browser-compat-data
다양한 웹 기술의 브라우저 지원 데이터를 제공하는 프로젝트로, `Object.hasOwn`의 브라우저별 지원 현황을 파악하는 데 유용하며, 콘텐츠의 브라우저 지원 섹션과 직접적으로 연결됩니다.
관련도: 85%