Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Object.prototype.hasOwnProperty()

概要

オブジェクトが指定されたプロパティを持っているかどうかを示す真偽値を返します。

構文

obj.hasOwnProperty(prop)
  • obj : Object オブジェクト
  • prop : 調べるプロパティ名

説明

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

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

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

var o = new Object();
o.prop = 'exists';

alert( o.hasOwnProperty('prop') ); // true


// [プロパティ名を変更する関数] : 指定オブジェクトの特定のプロパティの値を新しいプロパティに移し元のプロパティを削除
function changePropName(obj, propNameStr, newPropNameStr) {
  o[newPropNameStr] = o[propNameStr];
  delete o[propNameStr];
}

changePropName(o, "prop", "newProp"); // 関数を実行
alert( o.hasOwnProperty('prop') );    // false (※ prop プロパティは既に newProp プロパティに書き換わっている)

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

「固有のプロパティ」と、「プロトタイプチェーンを通じて継承されたプロパティ」を識別する方法を以下に示します。

var o = new Object();

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

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

The following example shows how to iterate over the properties of an object without executing on inherit properties. Note that the for..in loop is already only iterating enumerable items, so one should not assume based on the lack of non-enumerable properties shown in the loop that hasOwnProperty itself is confined strictly to enumerable items (as with getOwnPropertyNames).

var buz = {
  fog: 'stack'
};

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

関連情報

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

 このページの貢献者: mushahiroyuki, teoli, ethertank, kakakakakku, Mgjbot, Yuichirou, Potappo
 最終更新者: mushahiroyuki,