对比 object.getOwnPropertyNames() 和 object.keys()

阅读时长 3 分钟读完

简介

在 JavaScript 中,我们可以使用 Object.getOwnPropertyNames()Object.keys() 两个方法来获取对象的属性名列表。这两个方法看起来很相似,但实际上它们有一些重要的区别。

在本文中,我们将深入探讨这两个方法之间的差异,并说明何时应该使用哪个方法。

Object.getOwnPropertyNames()

Object.getOwnPropertyNames() 方法返回一个包含给定对象自己的所有属性名称的数组,不包括从原型链继承的属性。

值得注意的是,Object.getOwnPropertyNames() 不会返回 enumerable 属性为 false 的属性名称。

Object.keys()

Object.getOwnPropertyNames() 不同,Object.keys() 方法只返回给定对象自己的可枚举属性名称的数组,也不包括从原型链继承的属性。

区别与应用

到目前为止,您可能已经发现这两个方法之间最大的区别就是处理 enumerable 属性为 false 的属性时的表现不同。此外,由于 Object.keys() 只返回可枚举属性,因此它通常比 Object.getOwnPropertyNames() 更常用。

但是,有时候我们需要查找对象中所有属性,包括那些不可枚举的属性。这时候 Object.getOwnPropertyNames() 就派上用场了。

-- -------------------- ---- -------
----- --- - -
  ----- -------
  ---- --
--

-------------------------- ---------- -
  ------ ---- ------
  ----------- -----
---

--------------------------------------------- -- -------- ------ ----------
------------------------------ -- -------- ------

在以上示例中,我们使用 Object.defineProperty() 方法给对象添加了一个不可枚举的属性 address。使用 Object.getOwnPropertyNames() 方法,我们可以获取到该属性的名称,而 Object.keys() 则不能获取到。

总结

虽然 Object.getOwnPropertyNames()Object.keys() 看起来很相似,但它们之间确实有一些重要的区别。根据您的需求,选择正确的方法非常重要。

  • 如果您只需要获取对象的可枚举属性,则应该使用 Object.keys()
  • 如果您需要获取对象的所有属性,包括不可枚举属性,则应该使用 Object.getOwnPropertyNames()

希望本文能够帮助您更好地理解和使用这两个方法。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/10150

纠错
反馈