【JavaScript原生】Object.prototype.hasOwnProperty()

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

知らせ、最後の場合にのみ、新しいオブジェクトは作成されません。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

おすすめ

転載: blog.csdn.net/weixin_43853746/article/details/121887963