Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2022年3月以降、すべてのブラウザーで利用可能です。
Object.hasOwn() は静的メソッドで、指定されたオブジェクトが、指定されたプロパティを自身のプロパティとして持っている場合に true を返します。そのプロパティが継承されている場合、または存在しない場合、このメソッドは false を返します。
メモ: Object.hasOwn() 静的メソッドは Object.hasOwnProperty() インスタンスメソッドを置き換えるものとして意図されています。
テストする JavaScript オブジェクトのインスタンス。
propテストするプロパティの名前の文字列またはシンボル。
指定されたオブジェクトが指定されたプロパティを直接定義している場合、true を返します。それ以外の場合は false を返します。
Object.hasOwn() メソッドは、指定されたプロパティがオブジェクトの直接のプロパティである場合、そのプロパティ値が null または undefined であっても、true を返します。プロパティが継承されているか、またはまったく宣言されていない場合、このメソッドは false を返します。in 演算子とは異なり、このメソッドは、オブジェクトのプロトタイプチェーンで指定されたプロパティをチェックしません。
Object.prototype.hasOwnProperty() よりも推奨される理由は、 null プロトタイプオブジェクトや、継承した hasOwnProperty() メソッドをオーバーライドしたオブジェクトに対して動作することです。これらの問題を回避するには、別のオブジェクトの Object.prototype.hasOwnProperty() にアクセスする方法がありますが(Object.prototype.hasOwnProperty.call(obj, prop) のように)、Object.hasOwn() の方が直感的で簡潔です。
次のコードは、example オブジェクトに prop という名前のプロパティが含まれているかどうかを判断する方法を示しています。
以下の例では、直接のプロパティとプロトタイプチェーンを通じて継承されたプロパティを区別します。
オブジェクトの列挙可能なプロパティを反復処理するには、以下のようにします。
もし for...in を使う必要がある場合には、Object.hasOwn() を使うことで継承されたプロパティをスキップすることができます。
Array の要素は直接のプロパティとして定義されているので、hasOwn() メソッドで特定のインデックスが存在するかどうかを調べることができます。
この節では、Object.hasOwn() が hasOwnProperty() に影響を与える問題を回避していることを示します。最初の、hasOwnProperty() を再実装したオブジェクトでも使用できます。下記の実例では、再実装された hasOwnProperty() メソッドはすべてのプロパティに対して false を返しますが、Object.hasOwn() の動作は影響を受けません。
また、 null プロトタイプオブジェクトでも使用することができます。これらは Object.prototype を継承していないため、hasOwnProperty() はアクセスできません。
| ECMAScript® 2027 Language Specification # sec-object.hasown |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。