Object.prototype.hasOwnProperty()
hasOwnProperty()メソッドは、オブジェクトがそれ自体のプロパティに指定されたプロパティを持っているかどうか(つまり、指定されたキーを持っているかどうか)を示すブール値を返します。素人の用語では、プロパティがプロトタイプチェーンから継承されるのではなく、オブジェクト自体で定義されているかどうかを判断するために使用されます。
文法
obj.hasOwnProperty(prop)
- prop
をチェックするプロパティの名前またはSymbolの文字列文字列表現。 - 戻り値
オブジェクトが指定されたプロパティを持っているかどうかを判断するために使用されるブール値。
例
const obj = {
};
obj.property1 = 88;
console.log(obj.hasOwnProperty('property1')); // true
console.log(obj.hasOwnProperty('toString')); // false
console.log(obj.hasOwnProperty('hasOwnProperty')); // false
注:プロパティの値がnull
またであっundefined
ても、プロパティが存在する限り、hasOwnProperty
それは返されtrue
ます。
o = new Object();
o.lisi = null;
o.hasOwnProperty('lisi'); // 返回 true
o.lizi = undefined;
o.hasOwnProperty('lizi'); // 返回 true
hasOwnPropertyメソッドを使用してプロパティが存在するかどうかを判断する
次の例では、オブジェクトoに独自のプロパティpropがあるかどうかを確認します。
o = new Object();
o.hasOwnProperty('prop'); // 返回 false
o.prop = 'exists';
o.hasOwnProperty('prop'); // 返回 true
delete o.prop;
o.hasOwnProperty('prop'); // 返回 false
所有プロパティと継承プロパティ
次の例は、hasOwnPropertyメソッドによる所有プロパティと継承プロパティの処理の違いを示しています。
o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop'); // 返回 true
o.hasOwnProperty('toString'); // 返回 false
o.hasOwnProperty('hasOwnProperty'); // 返回 false
プロパティ名としてhasOwnPropertyを使用する
JavaScriptはプロパティ名を保護しないためhasOwnProperty
、 hasOwnPropertyが関数名として設定されている状況があります。
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
次に、使用する場合:
foo.hasOwnProperty('bar'); // 始终返回 false
この状況を解決するには、次の2つの方法を使用できます。
// 1. 可以直接使用原型链上真正的 hasOwnProperty 方法
({
}).hasOwnProperty.call(foo, 'bar'); // true
// 2. 使用 Object 原型上的 hasOwnProperty 属性
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
知らせ、最後の場合にのみ、新しいオブジェクトは作成されません。