JavaScript hasOwnProperty

2025年3月18日 | 阅读 5 分钟

在本教程中,我们将了解 JavaScript 中 hasOwnProperty() 方法的局限性和功能。我们还将学习它在各个部分的实现和用法。

引言

JavaScript 中,hasOwnProperty() 方法被定义为一个属性,用于确保对象是否属于所提及的项目。如果发现该属性属于一个已识别的对象,它将返回一个基于布尔值的输出,即 true 或 false。

语法

参数

Propname

在这里,我们需要传递符号或字符串名称,因为 prop 是检查符号或字符串是否属于该对象的位置。这是使用下面给出的方法完成的。

需要注意的一个重要方面是,hasOwnProperty() 方法通常会忽略继承的属性。这意味着如果对象具有非继承属性且名称由 propname 指定,则该方法将返回 true。如果返回 false,则表示该对象没有指定名称的属性,或者它继承了 proptype 对象中的属性。

使用 hasOwnProperty() 方法的另一个优点是,它可以遵循将字符串作为默认参数的概念来初始化对象。如果找到该值,它将快速响应 true。否则,如果找不到,它将返回 false。可以使用下面给出的代码片段来演示这一点。

在上面提供的代码片段中,变量创建了一个新对象 Car。现在可以说 Car 被初始化,其属性和名称在构造函数下定义。虽然颜色在初始化时可能未在对象中提及,但它始终可以在原型 层次结构 中找到。因此,hasOwnProperty() 对于 name 总是返回 true,但对于 color,它将返回 false。

在性能方面,hasOwnProperty() 在循环遍历对象时工作得很顺利。到现在为止,我们可以说,如果属性明确属于对象。它们与原型没有任何关联。下面给出的代码片段可以演示这一点。

在使用 hasOwnProperty() 方法时,它可能会变得无用,因为当定义一个名为 hasOwnProperty 的属性时,对象的渲染就会发生。为了支持这一点,请尝试理解下面给出的代码片段。

在上面的代码片段中,显而易见 harrypotter 已经拥有 hasOwnProperty。因此,它永远不会调用 object.prototype.hasOwnProperty。假定这可能会遇到允许调用但最终可能失败的情况。因此,始终建议注意调用的可能性。下面的代码片段显示了其解决方法。

在上面提供的代码片段中,很清楚 harrypotter 定义了它自己的 hasOwnProperty。它永远不会调用 Object.prototype.hasOwnProperty,因为有可能在某些值为 false 的情况下它会返回 false,从而难以解决问题。为了支持这一点,请参见下面的代码片段。

与 hasOwnProperty 类似,还有另一个名为“in”的方法。它也用于检查对象是否具有该键。但是,需要注意的是,hasOwnProperty 和 in 方法之间的主要区别在于,in 方法不会区分继承的属性和为对象专门创建的属性。下面给出的代码片段可以显示这一点。

在上面的代码片段中,显而易见 'in' 方法遵循 Object.prototype 的构造函数属性,所有对象都从中继承。

总而言之,这两种方法都有一个缺点。这两种方法都可以轻松地提供有关已声明属性的信息,但它们无法告诉我们有关包含实际值的属性。

考虑以下代码片段,它显示了这两种方法如何实现此解决方法。

结论

在本教程中,我们讨论了 JavaScript 中的 hasOwnProperty() 方法。总的来说,对于大多数开发人员来说,此方法是查询和避免与 constructor 等特殊键相关的问题的绝佳选择。建议如果我们发现任何对象具有任何属性,它将默认使用 hasOwnProperty()。如果存在旨在通过检查对象的 toString() 方法来进行调用的函数,我们必须使用 in。