Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。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 |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。