📜  在 js 中获取对象键名 - Javascript (1)

📅  最后修改于: 2023-12-03 14:50:58.097000             🧑  作者: Mango

在 JS 中获取对象键名 - Javascript

在 Javascript 中,对象(object)是一种非常常见的数据类型。而获取对象键名(key)则是我们经常需要做的事情之一。本文将介绍如何在 JS 中获取对象键名。

1. Object.keys()

Object.keys() 是一个 JS 内置函数,用于返回指定对象的所有可枚举属性(即键名)的数组。

const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj); // ['a', 'b', 'c']

Object.keys() 适用于所有普通的对象,但不适用于原型对象(prototype)。

function Foo() {}
Foo.prototype.bar = function() {};

const obj = new Foo();
const keys = Object.keys(obj); // []
2. for...in 循环

for...in 循环可以遍历一个对象的所有可枚举属性(即键名)。

const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
  console.log(key); // 'a', 'b', 'c'
}

需要注意的是,for...in 循环会遍历对象的原型和原型链上的属性,所以我们需要使用 hasOwnProperty() 方法来判断属性是否为对象自身的属性。

function Foo() {}
Foo.prototype.bar = function() {};
const obj = new Foo();
obj.a = 1;
obj.b = 2;
for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key); // 'a', 'b'
  }
}
3. Reflect.ownKeys()

Reflect.ownKeys() 是一个 JS 内置函数,用于返回指定对象的所有可枚举属性和不可枚举属性(即键名)的数组。

const obj = { a: 1, b: 2, c: 3 };
Object.defineProperty(obj, 'd', { value: 4, enumerable: false }); // 添加一个不可枚举属性
const keys = Reflect.ownKeys(obj); // ['a', 'b', 'c', 'd']

需要注意的是,Reflect.ownKeys() 会返回对象自身的属性以及继承自原型和原型链的属性。

总结

Object.keys() 可以返回对象自身的可枚举属性,但不包括继承的属性。for...in 循环可以遍历对象自身的所有可枚举属性,但会包括继承的属性。Reflect.ownKeys() 可以返回对象自身的所有属性,包括可枚举属性和不可枚举属性,以及继承的属性。在实际使用中需要根据具体的场景选择相应的方法来获取对象的键名。