推荐使用 for...of 遍历 object.entries() 返回的键值对数组,因其语义清晰、代码简洁且自动跳过原型链属性;也可用 foreach 实现函数式处理,或传统 for 循环获取索引。

直接用 Object.entries() 把对象转成键值对数组,再配合 for...of 循环,就能同时拿到键和值,比传统 for...in + hasOwnProperty 简洁安全得多。
用 for...of 遍历 entries 最自然
这是最推荐的方式:语义清晰、代码简洁、自动跳过原型链上的属性。
-
Object.entries(obj)返回一个二维数组,每一项是[key, value] -
for...of直接解构每一对,无需下标操作 - 不遍历继承属性,避免意外行为
const user = { name: '张三', age: 28, city: '杭州' };
for (const [key, value] of Object.entries(user)) {
console.log(`${key}: ${value}`);
}
// 输出:
// name: 张三
// age: 28
// city: 杭州
用 forEach 处理每对键值(适合函数式风格)
如果习惯链式调用或想复用处理逻辑,forEach 同样方便,且支持解构参数。
- 写法紧凑,适合简单处理(如打印、收集、校验)
- 注意:不能用
break或return中断循环(可用some/every替代)
const config = { theme: 'dark', lang: 'zh-CN', autoSave: true };
Object.entries(config).forEach(([k, v]) => {
if (typeof v === 'string') {
console.log(`配置项 ${k} 是字符串:${v}`);
}
});
需要索引时用 for 循环 + 解构
极少数场景需要访问当前项的索引(比如做条件跳过、分组),可用传统 for 循环。
- 先获取
entries数组,再按索引访问 - 仍可解构
[key, value],保持可读性
const data = { a: 10, b: 20, c: 30 };
const entries = Object.entries(data);
for (let i = 0; i
<h3>注意点:entries 不处理 Symbol 键和不可枚举属性</h3>
<p><code>Object.entries()</code> 只返回对象自身、可枚举、字符串类型的键值对。</p>
- Symbol 作为键的属性会被忽略(可用
Object.getOwnPropertySymbols()单独处理) - 通过
Object.defineProperty设置enumerable: false的属性也不会出现 - 要包含所有自有属性(含 Symbol 和不可枚举),需组合使用
Object.getOwnPropertyNames()和Object.getOwnPropertySymbols()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











