在 JavaScript 中,遍历对象有多种方法,每种方法适用于不同场景。以下是详细的遍历方法及示例:
1. for...in 循环- 特点:遍历对象自身及原型链上的可枚举属性。
- 注意:需配合 hasOwnProperty() 过滤原型链属性。
- 示例:const person = { name: 'John', age: 30 };for (const key in person) { if (person.hasOwnProperty(key)) { // 过滤原型链属性 console.log(`${key}: ${person[key]}`); }}
2. Object.keys()- 特点:返回对象自身属性名的数组,仅包含可枚举属性。
- 适用场景:需操作属性名时(如结合 forEach)。
- 示例:const keys = Object.keys(person);keys.forEach(key => { console.log(`${key}: ${person[key]}`);});
3. Object.values()- 特点:返回对象自身属性值的数组。
- 适用场景:仅需处理属性值时。
- 示例:const values = Object.values(person);values.forEach(value => { console.log(value); // 输出: "John", 30});
4. Object.entries()- 特点:返回 [key, value] 形式的二维数组。
- 适用场景:需同时获取键和值时(如解构赋值)。
- 示例:const entries = Object.entries(person);entries.forEach(([key, value]) => { console.log(`${key}: ${value}`);});
5. Object.getOwnPropertyNames()- 特点:返回所有自身属性名(包括不可枚举属性,但不包括 Symbol)。
- 示例:const allKeys = Object.getOwnPropertyNames(person);allKeys.forEach(key => { console.log(`${key}: ${person[key]}`);});
6. Reflect.ownKeys()- 特点:返回所有自身键(包括 Symbol 和不可枚举属性)。
- 示例:const allKeys = Reflect.ownKeys(person);allKeys.forEach(key => { console.log(`${String(key)}: ${person[key]}`);});
注意事项- 原型链属性:for...in 会遍历原型链属性,其他方法(如 Object.keys())做察仅处理自身属性。颂手
- 性能:直接操作数组(如 Object.keys() + forEach)通常比 for...in 更高效。
- 不可枚举属性:默认方法(如 Object.keys())不包含不可枚举属性,需用 Object.getOwnPropertyNames()。
总结- 仅需键:Object.keys()。野胡嫌
- 仅需值:Object.values()。
- 键值对:Object.entries() 或 for...in + hasOwnProperty。
- 包含不可枚举属性:Object.getOwnPropertyNames() 或 Reflect.ownKeys()。
根据需求选择合适的方法,确保代码简洁且高效。