深入了解JS Object.keys

发布时间:2023-05-23

一、基本介绍

Object.keys()是JS的原生函数之一,它返回一个给定对象所有属性的字符数组,该数组包括对象本身的可枚举属性以及从原型链继承的可枚举属性(不包括属性值为undefined的属性)。 下面是一个示例:

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

从上面的例子中可以看出,Object.keys()不返回属性值为undefined的属性。

二、多层嵌套对象

Object.keys()同样可以处理多层嵌套的对象。在这种情况下,Object.keys()将返回第一层对象的所有可枚举属性的名称数组。 考虑下面这个例子:

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

从上面的例子中可以看出,Object.keys()只返回第一层对象的属性名称。如果我们想要获取所有嵌套对象的属性名称,可以使用递归或循环,并在每个嵌套对象上使用Object.keys()

三、支持类数组对象

Object.keys()不仅可以用于普通对象,还可以用于类数组对象。类数组对象是一个具有数字键和length属性的对象。例如,一个函数的参数是一个类数组对象。在这种情况下,Object.keys()将返回数字键的字符串表示形式,不包括length属性。 考虑下面这个例子:

function func() {
  console.log(Object.keys(arguments));
}
func(1, 2, 3); // ['0', '1', '2']

四、符号属性

Object.keys()不返回符号属性。符号属性是指使用符号作为属性键的属性。这是因为符号属性是非常新的功能,只在ES6中引入。 考虑下面这个例子:

const sym = Symbol('sym');
const obj = {
  a: 1,
  [sym]: 'symbol',
};
console.log(Object.keys(obj)); // ['a']

从上面的例子中可以看出,符号属性并未出现在Object.keys()的结果中。

五、总结

通过本文的介绍,我们学习了JS中一个非常简单但非常有用的函数:Object.keys()。我们了解了它的基本用法,以及如何处理对象的嵌套和类数组对象。我们还了解了符号属性如何与Object.keys()互动。