for...of 不能直接遍历普通对象,因对象默认不可迭代;object.entries() 将其转为可迭代的[key, value]二维数组,从而支持解构遍历,且仅返回自身可枚举属性。

JavaScript 中 for...of 本身不能直接遍历普通对象(因为对象不是可迭代的),但配合 Object.entries() 就能轻松实现键值对遍历。
为什么需要 Object.entries()?
Object.entries(obj) 会把对象转成一个二维数组,每一项是 [key, value] 形式的子数组。这个数组是可迭代的,所以能被 for...of 消费。
基本写法:解构 + for...of
最常用、最清晰的方式是在循环中直接解构每一对键值:
const user = { name: 'Alice', age: 30, city: 'Beijing' };
for (const [key, value] of Object.entries(user)) {
console.log(`${key}: ${value}`);
}
// 输出:
// name: Alice
// age: 30
// city: Beijing
其他常见用法变体
-
只取 key 或只取 value:可以只解构需要的部分,比如
for (const [key] of Object.entries(obj))或for (const [, value] of Object.entries(obj)) -
配合条件筛选:在循环内加
if判断,例如跳过某个字段:if (key === 'age') continue; -
转换数据结构:比如生成新对象、数组或字符串,
const arr = [...Object.entries(obj)].map(([k, v]) => ({ k, v }));
注意点
Object.entries() 只遍历对象自身的可枚举属性,不包括原型链上的属性,也不包括 Symbol 类型的键。如果需要包含 Symbol 键,得用 Object.getOwnPropertySymbols() 配合;若需继承属性,应先用 Object.getPrototypeOf() 手动获取并合并。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











