什么是属性 在 JavaScript 中 hasOwnProperty?

2022-08-30 05:02:04

考虑:

if (someVar.hasOwnProperty('someProperty') ) {
 // Do something();
} else {
 // Do somethingElse();
}

什么是正确的用法/解释?hasOwnProperty('someProperty')

为什么我们不能简单地用来检查一个对象是否包含带有名称的属性?someVar.somePropertysomeVarsomeProperty

在这种情况下,什么是属性?

这个 JavaScript 检查什么属性?


答案 1

hasOwnProperty返回一个布尔值,该值指示要在其上调用的对象是否具有具有具有参数名称的属性。例如:

var x = {
    y: 10
};
console.log(x.hasOwnProperty("y")); //true
console.log(x.hasOwnProperty("z")); //false

但是,它不查看对象的原型链。

当您使用构造枚举对象的属性时,使用它很有用。for...in

如果您想查看完整的细节,ES5规范一如既往地是一个很好的地方。


答案 2

这是一个简短而准确的答案:

在JavaScript中,每个对象都有一堆内置的键值对,这些键值对具有有关该对象的元信息。当您使用对象的构造/循环遍历所有键值对时,您也在循环遍历此元信息键值对(您绝对不希望)。for...in

Enter image description here

使用过滤器将这些不必要的元信息循环出来,并直接检查参数是否是用户在对象中给定的属性。通过过滤,我的意思是,这看起来,如果,存在于Object的原型链中,也就是元信息。hasOwnPropery(property)propertyhasOwnProperty(property)property

它基于此返回布尔值。true/false

下面是一个示例:

var fruitObject = {"name": "Apple", "shape": "round", "taste": "sweet"};
console.log(fruitObject.hasOwnProperty("name"));  //true
console.log(Object.prototype.hasOwnProperty("toString");) //true because in above snapshot you can see, that there is a function toString in meta-information

我希望它很清楚!