返回

用内在的钥匙开启思想的枷锁:深入解析 Object.keys() 和 Object.getOwnPropertyNames()

前端

在 JavaScript 中,对象就好比一个百宝箱,里面装满了各种各样的属性,这些属性就像一个个小抽屉,里面藏着各种有价值的数据。为了访问这些数据,我们需要一把钥匙,而 Object.keys() 和 Object.getOwnPropertyNames() 正是这两把打开宝箱的钥匙。

Object.keys():一把通向可枚举属性的钥匙

Object.keys() 是一把专攻可枚举属性的钥匙。所谓可枚举属性,是指那些可以通过 for...in 循环访问的属性。当我们使用 Object.keys() 来获取对象的可枚举属性名时,它会返回一个包含这些属性名的数组。

const person = {
  name: "John",
  age: 30,
  city: "New York"
};

const keys = Object.keys(person);

console.log(keys); // ["name", "age", "city"]

在这个例子中,Object.keys() 返回了 person 对象中所有可枚举属性的名称,这些名称被存储在 keys 数组中。

Object.getOwnPropertyNames():一把通向所有属性的钥匙

Object.getOwnPropertyNames() 是一把通向所有属性的钥匙,它不仅可以获取可枚举属性,还可以获取不可枚举属性。不可枚举属性是指那些无法通过 for...in 循环访问的属性。

const person = {
  name: "John",
  age: 30,
  city: "New York",
  // 将 gender 属性设置为不可枚举
  gender: {
    enumerable: false,
    value: "male"
  }
};

const keys = Object.getOwnPropertyNames(person);

console.log(keys); // ["name", "age", "city", "gender"]

在这个例子中,Object.getOwnPropertyNames() 返回了 person 对象中所有属性的名称,包括可枚举属性和不可枚举属性。

何时使用 Object.keys() 和 Object.getOwnPropertyNames()?

Object.keys() 和 Object.getOwnPropertyNames() 这两把钥匙各有其用武之地。一般来说,我们使用 Object.keys() 来获取对象的可枚举属性名,因为可枚举属性通常是我们最关心的。但是,如果我们需要获取对象的所有属性名,包括不可枚举属性,那么我们就需要使用 Object.getOwnPropertyNames()。

总结

Object.keys() 和 Object.getOwnPropertyNames() 是 JavaScript 中获取对象属性名的两把重要钥匙。Object.keys() 专攻可枚举属性,Object.getOwnPropertyNames() 则包揽所有属性,无论它们是否枚举。了解这两把钥匙的用法,将帮助我们更好地探索 JavaScript 对象的奥秘,从而编写出更加健壮的代码。