遍历对象属性 
1. for...in 循环 
遍历对象及其原型链上的 可枚举属性。
javascript
for (const key in obj) {
  if (obj.hasOwnProperty(key)) { // 仅自身属性
    console.log(key, obj[key]);
  }
}1
2
3
4
5
2
3
4
5
适用场景:基础遍历,需手动过滤原型属性。
2. Object.keys() 
返回对象 自身可枚举属性 的键组成的数组。
javascript
Object.keys(obj).forEach(key => {
  console.log(key, obj[key]);
});1
2
3
2
3
适用场景:仅需处理对象自身的属性。
3. Object.values() 
返回对象 自身可枚举属性值 的数组。
javascript
Object.values(obj).forEach(value => {
  console.log(value);
});1
2
3
2
3
适用场景:仅关注值,无需键名(ES2017+)。
4. Object.entries() 
返回对象 键值对数组( [key, value] )。
javascript
Object.entries(obj).forEach(([key, value]) => {
  console.log(key, value);
});1
2
3
2
3
适用场景:需同时处理键和值(ES2017+)。
5. Object.getOwnPropertyNames() 
返回对象自身所有属性(包括不可枚举属性,不含 Symbol)。
javascript
Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key);
});1
2
3
2
3
适用场景:需要包含不可枚举属性(如内置属性)。
6. Reflect.ownKeys() 
返回对象自身的所有属性键(包括 Symbol 和不可枚举)。
javascript
Reflect.ownKeys(obj).forEach(key => {
  console.log(key);
});1
2
3
2
3
适用场景:高级场景需处理 Symbol 或所有属性。
总结 
| 方法 | 特点 | 兼容性 | 
|---|---|---|
| for...in | 遍历可枚举属性(含原型链,需 hasOwnProperty过滤) | 全部 | 
| Object.keys()系列 | 仅自身可枚举属性(键、值、键值对) | ES5+/ES2017+ | 
| Object.getOwnPropertyNames() | 自身所有属性(不含 Symbol) | ES5+ | 
| Reflect.ownKeys() | 自身所有属性(含 Symbol) | ES6+ | 
根据需求选择合适方法,推荐优先使用 Object.keys() 或 Object.entries() ,确保代码简洁和可维护性。