hasOwnProperty() メソッドは、オブジェクト自身が(継承されていない)指定されたプロパティを持っているかどうかを示す真偽値を返します。

構文

obj.hasOwnProperty(prop)

引数

prop
テストするプロパティの名前の String または Symbol

返値

Boolean で、オブジェクトが指定されたプロパティを自身のプロパティとして持っているかどうかを示す

説明

Object のすべての子孫は hasOwnProperty メソッドを継承しています。このメソッドはあるオブジェクトが指定されたプロパティを、そのオブジェクトの直接のプロパティとして持っているかどうかを特定するのに使うことができます。 in 演算子とは異なり、このメソッドはオブジェクトのプロトタイプチェーンをたどってチェックしません。

メモ

hasOwnProperty はプロパティの値が null または undefined であっても true を返します。

o = new Object();
o.propOne = null;
o.hasOwnProperty('propOne');   // true を返す
o.propTwo = undefined;  
o.hasOwnProperty('propTwo');   // true を返す

hasOwnProperty を使ってプロパティの存在を調べる

オブジェクト oprop という名前のプロパティを持っているかどうかを特定する例を以下に示します。

o = new Object();
o.hasOwnProperty('prop');   // false を返す
o.prop = 'exists';  
o.hasOwnProperty('prop');   // true を返す

直接のプロパティと継承されたプロパティ

以下の例では、直接のプロパティとプロトタイプチェーンを通じて継承されたプロパティを区別します。

o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');             // true を返す
o.hasOwnProperty('toString');         // false を返す
o.hasOwnProperty('hasOwnProperty');   // false を返す

オブジェクトのプロパティの反復処理

以下の例では、継承されたプロパティを除いてオブジェクトのプロパティを反復処理する方法を示します。なお、 for...in ループですでに列挙可能なアイテムのみが反復処理されるので、 hasOwnProperty 自体は列挙可能なアイテムに厳密に限定されているため、ループ内に列挙できないプロパティが見られないことに基づいて想定するべきではありません (Object.getOwnPropertyNames() のように)。

var buz = {
  fog: 'stack'
};

for (var name in buz) {
  if (buz.hasOwnProperty(name)) {
    console.log('this is fog (' + 
      name + ') for sure. Value: ' + buz[name]);
  }
  else {
    console.log(name); // toString or something else
  }
}

プロパティ名としての hasOwnProperty の使用

JavaScript は hasOwnProperty というプロパティ名を保護していません。したがって、オブジェクトがこの名前のプロパティを持っている場合が存在すれば、正しい結果を得るためには外部の hasOwnProperty を使用する必要があります。

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // 常に false を返す

// 別な Object の hasOwnProperty 使用して、
// this を foo に設定して呼び出す
({}).hasOwnProperty.call(foo, 'bar'); // true

// この目的では、 Object プロトタイプの hasOwnProperty プロパティを
// 使用することもできます。
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

なお、後者の場合は新しくオブジェクトを生成しません。

仕様書

仕様書 状態 備考
ECMAScript Latest Draft (ECMA-262)
Object.prototype.hasOwnProperty の定義
ドラフト  
ECMAScript 2015 (6th Edition, ECMA-262)
Object.prototype.hasOwnProperty の定義
標準  
ECMAScript 5.1 (ECMA-262)
Object.prototype.hasOwnProperty の定義
標準  
ECMAScript 3rd Edition (ECMA-262) 標準 初回定義。 JavaScript 1.5 で実装。

ブラウザーの対応

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
hasOwnPropertyChrome 完全対応 ありEdge 完全対応 12Firefox 完全対応 1IE 完全対応 ありOpera 完全対応 ありSafari 完全対応 ありWebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 4Opera Android 完全対応 ありSafari iOS 完全対応 ありSamsung Internet Android 完全対応 ありnodejs 完全対応 あり

凡例

完全対応  
完全対応

関連情報

ドキュメントのタグと貢献者

最終更新者: mdnwebdocs-bot,