JavaScript中获取对象键(key)的方法有多种,比如for...in循环,Object.keys(),Object.getOwnPropertyNames(),Object.getOwnPropertySymbols(),Reflect.ownKeys()等。这些方法在获取对象键(key)时有着不同的特点,下面将分别介绍它们的用法和区别。
for...in循环
for...in循环是ES5中的一种遍历对象的方法,它可以获取一个对象中所有可枚举的属性,语法格式如下:
for (const key in obj ) { // 执行代码 }
for...in循环可以获取到对象中的所有可枚举属性,包括原型链上的属性,但是不能获取到Symbol类型的键,所以使用for...in循环获取对象键(key)时,可能会出现意外的结果。
Object.keys()
Object.keys()是ES6中的一种方法,它可以获取一个对象中所有可枚举的自身属性,语法格式如下:
Object.keys(obj) // 返回一个数组,数组的元素为对象中所有可枚举的自身属性的键名
Object.keys()可以获取到对象中的所有可枚举的自身属性,但是不能获取到原型链上的属性,也不能获取到Symbol类型的键。
Object.getOwnPropertyNames()
Object.getOwnPropertyNames()也是一种ES6中的方法,它可以获取一个对象中所有的自身属性,包括不可枚举的属性,语法格式如下:
Object.getOwnPropertyNames(obj) // 返回一个数组,数组的元素为对象中所有自身属性的键名
Object.getOwnPropertyNames()可以获取到对象中的所有自身属性,包括不可枚举的属性,但是不能获取到原型链上的属性,也不能获取到Symbol类型的键。
Object.getOwnPropertySymbols()
Object.getOwnPropertySymbols()是ES6中的一种方法,它可以获取一个对象中所有的Symbol类型的属性,语法格式如下:
Object.getOwnPropertySymbols(obj) // 返回一个数组,数组的元素为对象中所有Symbol类型的属性的键名
Object.getOwnPropertySymbols()可以获取到对象中的所有Symbol类型的属性,但是不能获取到原型链上的属性,也不能获取到其他类型的键。
Reflect.ownKeys()
Reflect.ownKeys()是ES6中的一种方法,它可以获取一个对象中所有的属性,包括Symbol类型的属性,语法格式如下:
Reflect.ownKeys(obj) // 返回一个数组,数组的元素为对象中所有属性的键名
Reflect.ownKeys()可以获取到对象中的所有属性,包括Symbol类型的属性,但是不能获取到原型链上的属性。
以上就是JavaScript中获取对象键(key)的几种方法以及它们的区别,可以根据不同的需求来选择不同的方法来获取对象键(key)。