Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
如果指定的对象自身有指定的属性,则静态方法 Object.hasOwn() 返回 true。如果属性是继承的或者不存在,该方法返回 false。
备注:Object.hasOwn() 旨在取代 Object.prototype.hasOwnProperty()。
要测试的 JavaScript 实例对象。
prop如果指定的对象中直接定义了指定的属性,则返回 true;否则返回 false。
如果指定的属性是该对象的直接属性——Object.hasOwn() 方法返回 true,即使属性值是 null 或 undefined。如果属性是继承的或者不存在,该方法返回 false。它不像 in 运算符,这个方法不检查对象的原型链中的指定属性。
建议使用此方法替代 Object.prototype.hasOwnProperty(),因为它适用于使用 Object.create(null) 创建的对象,以及重写了继承的 hasOwnProperty() 方法的对象。尽管可以通过在外部对象上调用 Object.prototype.hasOwnProperty() 解决这些问题,但是 Object.hasOwn() 更加直观。
以下代码展示了如何确定 example 对象中是否包含名为 prop 的属性。
以下示例区分了直接属性和通过原型链继承的属性:
要迭代对象的可枚举属性,你应该这样使用:
但是如果你使用 for...in,你应该使用 Object.hasOwn() 跳过继承属性:
Array 中的元素被定义为直接属性,所以你可以使用 hasOwn() 方法去检查一个指定的索引是否存在:
本部分证明了影响 hasOwnProperty 的问题对 hasOwn() 是免疫的。首先,它可以与重新实现的 hasOwnProperty() 一起使用:
它也可以用于测试使用 Object.create(null) 创建的对象。这些对象不会继承自 Object.prototype,因此 hasOwnProperty() 方法是无法访问的。
| ECMAScript® 2027 Language Specification # sec-object.hasown |
启用 JavaScript 以查看此浏览器兼容性表。