Skip to content

遍历对象属性

1. for...in 循环

遍历对象及其原型链上的 可枚举属性

javascript
for (const key in obj) {
  if (obj.hasOwnProperty(key)) { // 仅自身属性
    console.log(key, obj[key]);
  }
}

适用场景:基础遍历,需手动过滤原型属性。


2. Object.keys()

返回对象 自身可枚举属性 的键组成的数组。

javascript
Object.keys(obj).forEach(key => {
  console.log(key, obj[key]);
});

适用场景:仅需处理对象自身的属性。


3. Object.values()

返回对象 自身可枚举属性值 的数组。

javascript
Object.values(obj).forEach(value => {
  console.log(value);
});

适用场景:仅关注值,无需键名(ES2017+)。


4. Object.entries()

返回对象 键值对数组[key, value])。

javascript
Object.entries(obj).forEach(([key, value]) => {
  console.log(key, value);
});

适用场景:需同时处理键和值(ES2017+)。


5. Object.getOwnPropertyNames()

返回对象自身所有属性(包括不可枚举属性,不含Symbol)。

javascript
Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key);
});

适用场景:需要包含不可枚举属性(如内置属性)。


6. Reflect.ownKeys()

返回对象自身的所有属性键(包括 Symbol 和不可枚举)。

javascript
Reflect.ownKeys(obj).forEach(key => {
  console.log(key);
});

适用场景:高级场景需处理Symbol或所有属性。


总结

方法特点兼容性
for...in遍历可枚举属性(含原型链,需hasOwnProperty过滤)全部
Object.keys()系列仅自身可枚举属性(键、值、键值对)ES5+/ES2017+
Object.getOwnPropertyNames()自身所有属性(不含Symbol)ES5+
Reflect.ownKeys()自身所有属性(含Symbol)ES6+

根据需求选择合适方法,推荐优先使用 Object.keys()Object.entries(),确保代码简洁和可维护性。