object.keys返回对象自身可枚举属性的字符串数组,配合for...of或foreach遍历最常用高效;for...of支持break/continue,foreach适合纯遍历但无法中断;它不包含symbol和不可枚举属性,高频调用需缓存结果。

Object.keys 返回对象自身可枚举属性的字符串数组,配合 for...of 或 forEach 是遍历对象属性最常用且高效的方式——它只遍历自有、可枚举属性,不进原型链,性能稳定,语义清晰。
用 for...of 遍历更直观、支持 break/continue
相比传统 for 循环,for...of 语法简洁,可直接获取键名,也支持提前退出:
- 先调用
Object.keys(obj)获取键数组 - 再用
for...of遍历每个 key,通过obj[key]访问值 - 遇到特定条件可用
break或continue控制流程
const user = { name: 'Alice', age: 30, city: 'Beijing' };
for (const key of Object.keys(user)) {
console.log(`${key}: ${user[key]}`); // name: Alice → age: 30 → city: Beijing
if (key === 'age') break; // 遇到 age 就停止
}
用 forEach 更函数式、适合纯遍历场景
如果只需对每个属性做处理、无需中断或返回新结构,forEach 写法紧凑,闭包自然捕获作用域变量:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 避免手动管理索引,减少出错可能
- 适合日志打印、批量赋值、简单校验等一次性操作
- 注意:不能用
return中断循环,如需提前退出应改用for...of
const config = { timeout: 5000, retry: 3, debug: true };
Object.keys(config).forEach(key => {
console.log(`Config ${key} = ${config[key]}`);
});
注意:Object.keys 不含 Symbol 属性和不可枚举属性
它只返回字符串键名,且仅限 自有 + 可枚举 属性。以下情况不会被遍历到:
- 通过
Object.defineProperty设置enumerable: false的属性 - Symbol 类型的键(如
Symbol('id')) - 原型链上的属性(如
toString)
Object.getOwnPropertyNames() 或 Reflect.ownKeys()。
性能小提示:避免重复调用 Object.keys
在循环内部反复调用 Object.keys(obj) 会多次创建新数组,浪费内存和时间。高频场景建议缓存结果:
- 把
const keys = Object.keys(obj)提前计算一次 - 后续遍历都基于
keys数组操作 - 尤其在函数内多次遍历时,这个优化效果明显
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










