ここには、オブジェクトにプロパティが存在するかどうかを確認する方法がいくつかあります。
私はいつも使っていました
if(myObj.hasOwnProperty('propName'))
しかし、私はからの違いがあるのだろうか
if('propName' in myObj){
それらはほぼ同じです。違いは、hasOwnProperty
はプロトタイプチェーンをチェックダウンしませんが、in
はチェックダウンします。
例
var test = function() {}
test.prototype.newProp = function() {}
var instance = new test();
instance.hasOwnProperty('newProp'); // false
'newProp' in instance // true
述べたように、 Object.hasOwnProperty
は "own properties"のみを返します。つまり、prototype
に追加されたプロパティではなく、直接追加されたプロパティです。
はい、違いがあります。 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
_