获取对象键值的几种方法

获取对象键值的几种方法包括:

  • 1、for in
  • 2、Object.keys()
  • 3、Object.getOwnPropertyNames()
  • 4、Object.getOwnPropertySymbols()
  • 5、Reflect.ownKeys()

下面具体探讨这些方法的特点和适用场景:

1、for in

主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性。

const obj = { name: 'abby', career: 'it' }
Object.defineProperty(obj, 'age', {
  value: 'forever 18',
  enumerable: false
})
Object.prototype.protoProp1 = function () {
  console.log('proto')
}
Object.prototype.protoProp2 = 2

console.log('For In : ')
for (const a in obj) console.log(a)
image.png

2、Object.keys()

这是一个基础且常用的方法,它返回一个包含对象所有可枚举属性名称的数组
该方法不会列出原型链上的属性,只关注对象自身的直接属性。
例如,对于对象let obj = {a: 1, b: 2}; Object.keys(obj)将返回['a', 'b']。
此方法适用于大多数日常开发需求,特别是当你需要知道对象有哪些直接属性时。

3、Object.getOwnPropertyNames()

与Object.keys()不同,Object.getOwnPropertyNames()不仅返回可枚举的属性名,还返回不可枚举的属性名
这意味着,如果对象的属性被标记为不可枚举(使用Object.defineProperty()),Object.keys()将无法看到这些属性,而Object.getOwnPropertyNames()则可以。

4、Object.getOwnPropertySymbols()

此方法专注于获取对象的所有Symbol类型的键
由于Symbol是一种特殊的数据类型,用于创建唯一的标识符,因此这个方法在处理具有Symbol键的对象时非常有用。
例如,如果你有一个使用Symbol作为键的对象,并且你想复制这个对象或遍历它的属性,你可以使用这个方法来获取所有的Symbol键。

5、Reflect.ownKeys()

这是一个更全面的方法,返回对象自身的所有键,包括字符串和Symbol类型的键,以及可枚举和不可枚举的键。这使它成为获取对象所有自有属性的最全面的方法
与Object.keys()相比,Reflect.ownKeys()提供了对对象属性的更完整的视图,特别是在涉及不可枚举属性或Symbol属性时。

以下是关于这些方法的使用场景及注意事项

当需要列出对象的所有自有属性(不论可枚举性)时,Reflect.ownKeys()是最合适的选择。
如果只关心对象的可枚举属性,可以使用Object.keys()。这是最常用的方法,适用于大多数情况。
当对象可能包含不可枚举属性时,应使用Object.getOwnPropertyNames()来确保不遗漏任何属性。
对于使用Symbol作为键的对象,Object.getOwnPropertySymbols()是唯一的选择。
在实际开发中,根据具体需求选择合适的方法,可以有效地解决问题并优化性能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容