遍历对象属性
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()
,确保代码简洁和可维护性。