web-dev-qa-db-ja.com

JavaScript:オブジェクトにプロパティがあるかどうかを確認します

ここには、オブジェクトにプロパティが存在するかどうかを確認する方法がいくつかあります。

私はいつも使っていました

if(myObj.hasOwnProperty('propName'))

しかし、私はからの違いがあるのだろうか

if('propName' in myObj){
27
sebilasse

それらはほぼ同じです。違いは、hasOwnPropertyはプロトタイプチェーンをチェックダウンしませんが、inはチェックダウンします。

var test = function() {}

test.prototype.newProp = function() {}

var instance = new test();

instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true

[〜#〜] fiddle [〜#〜]

述べたように、 Object.hasOwnProperty "own properties"のみを返します。つまり、prototypeに追加されたプロパティではなく、直接追加されたプロパティです。

45
adeneo

はい、違いがあります。 hasOwnProperty()は、prototypeで追加されたプロパティとメソッドを無視します。例で説明しようと思います。たとえば、オブジェクトのプロトタイプがある場合

_Object.prototype.something = function() {};
_

そして、あなたが次のobjectを持っているとしましょう

_var obj = {
    "a" : "one",
    "b" : "two"
};
_

そしてループ:

_for ( var i in obj ) {
    //if (obj.hasOwnProperty(i)) {
        console.log(obj[i]);
    //}
}
_

hasOwnPropertyなしではone two function()を出力しますが、hasOwnProperty()メソッドのみでは_one two_

FirstSecond DEMOSの違いをご覧ください

4
tnanoba