在 JavaScript 中,我们经常需要获取对象的属性列表。通常我们会使用 for...in
循环来获取对象的所有属性,但是这种方法有一个缺陷,就是它只能获取对象的可枚举属性,而不能获取对象的不可枚举属性和符号属性。这就给我们在实际开发中带来了很多麻烦。
幸运的是,在 ECMAScript 2017(ES8)中,新增了两个方法 Object.getOwnPropertyNames()
和 Object.getOwnPropertySymbols()
,它们可以帮助我们解决这个问题。
Object.getOwnPropertyNames()
Object.getOwnPropertyNames()
方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。语法如下:
Object.getOwnPropertyNames(obj)
其中,obj
表示要获取属性列表的对象。
下面是一个示例代码:
const obj = { name: 'Tom', age: 18 } const propertyNames = Object.getOwnPropertyNames(obj) console.log(propertyNames) // ['name', 'age']
在这个示例中,我们定义了一个对象 obj
,它有两个属性 name
和 age
。我们使用 Object.getOwnPropertyNames()
方法获取了 obj
的所有属性名,结果为 ['name', 'age']
。
Object.getOwnPropertySymbols()
Object.getOwnPropertySymbols()
方法返回一个由指定对象的所有自身符号属性的属性名组成的数组。语法如下:
Object.getOwnPropertySymbols(obj)
其中,obj
表示要获取符号属性列表的对象。
下面是一个示例代码:
const obj = { [Symbol('name')]: 'Tom', [Symbol('age')]: 18 } const propertySymbols = Object.getOwnPropertySymbols(obj) console.log(propertySymbols) // [Symbol(name), Symbol(age)]
在这个示例中,我们定义了一个对象 obj
,它有两个符号属性 Symbol('name')
和 Symbol('age')
。我们使用 Object.getOwnPropertySymbols()
方法获取了 obj
的所有符号属性名,结果为 [Symbol(name), Symbol(age)]
。
总结
在实际开发中,我们经常需要获取对象的属性列表,包括可枚举属性、不可枚举属性和符号属性。ES8 中新增的 Object.getOwnPropertyNames()
和 Object.getOwnPropertySymbols()
方法可以帮助我们解决这个问题。使用这两个方法,我们可以获取对象的所有属性列表,包括可枚举属性、不可枚举属性和符号属性,从而更好地处理对象的属性。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6618e582d10417a22297a09d