Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla
Your Search Results

    Object.prototype.hasOwnProperty()

    概要

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

    Object オブジェクトのメソッド
    実装されたバージョン JavaScript ?
    ECMAScript エディション ECMAScript 3rd Edition

    構文

    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
      }
    }

    関連情報

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

    Contributors to this page: Yuichirou, Mgjbot, ethertank, teoli, Potappo, kakakakakku
    最終更新者: teoli,