Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
hasOwnProperty() は Object インスタンスのメソッドで、オブジェクト自身が(継承されていない)指定されたプロパティを持っているかどうかを示す論理値を返します。
メモ: Object.hasOwn() は hasOwnProperty() よりもブラウザーの対応状況の面で推奨されます。
テストするプロパティの名前の文字列またはシンボル。
オブジェクトが指定したプロパティを自分自身で保有している場合は true を返し、そうでない場合は false を返します。
hasOwnProperty() メソッドは、指定したプロパティがオブジェクトの直接のプロパティである場合 (たとえその値が null または undefined であっても) 、 true を返します。プロパティが継承されているか、まったく宣言されていない場合は false を返します。 in 演算子とは異なり、このメソッドはオブジェクトのプロトタイプチェーンに指定したプロパティがあるかどうかを調べません。
なぜなら、ほとんどのオブジェクトは Object の子孫であり、そのメソッドを継承しているからです。例えば配列 (Array) はオブジェクト Object なので、インデックスが存在するかどうかを調べるには hasOwnProperty() メソッドを使用することができます。
このメソッドは、再実装されたオブジェクトや、 null プロトタイプオブジェクト(Object.prototype を継承していない)では利用できません。これらの場合の例は下記の通りです。
オブジェクト o が prop という名前のプロパティを持っているかどうかを特定する例を以下に示します。
以下の例では、直接のプロパティとプロトタイプチェーンを通じて継承されたプロパティを区別します。
以下の例では、継承されたプロパティを除いてオブジェクトのプロパティを反復処理する方法を示します。
なお、 for...in ループですでに列挙可能なアイテムのみが反復処理されるので、 hasOwnProperty 自体は列挙可能なアイテムに厳密に限定されているため、ループ内に列挙できないプロパティが見られないことに基づいて想定するべきではありません (Object.getOwnPropertyNames() のように)。
JavaScript は hasOwnProperty というプロパティ名を保護していません。この名前を持ったプロパティを持つオブジェクトでは、正しくない結果が返る可能性があります。
この問題を克服するために推奨される方法は、代わりに Object.hasOwn() を使用することです(対応しているブラウザーで)。他にも、外部の hasOwnProperty を使用する方法があります。
なお、後者の場合は新しくオブジェクトを生成しません。
null プロトタイプオブジェクトは Object.prototype を継承していないので、 hasOwnProperty() はアクセス不可になります。
この場合の解決策は前の節と同じです。構成については Object.hasOwn() を使用し、そうでなければ外部オブジェクトの hasOwnProperty() を使用してください。
| ECMAScript® 2027 Language Specification # sec-object.prototype.hasownproperty |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月26日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.