推荐使用object.keys()、object.values()、object.entries()遍历对象自身可枚举属性,安全简洁;for...in需配合hasownproperty过滤继承属性;reflect.ownkeys()可获取不可枚举属性和symbol键。

JavaScript 遍历对象的键名和键值有多种方式,最常用且推荐的是 Object.keys()、Object.values()、Object.entries(),以及 for...in 循环。选择哪种方式取决于你是否需要处理原型链、是否要同时获取键和值、以及是否支持较老的浏览器。
用 Object.keys() / Object.values() / Object.entries() 获取键、值或键值对
这三个方法返回数组,可配合 forEach、for...of 或其他数组方法使用,安全、简洁、不遍历继承属性:
-
只遍历键名:
Object.keys(obj).forEach(key => console.log(key)) -
只遍历键值:
Object.values(obj).forEach(value => console.log(value)) -
同时遍历键和值:
Object.entries(obj).forEach(([key, value]) => console.log(key, value))
✅ 优点:只遍历对象自身的可枚举属性;语法清晰;支持解构;现代开发首选。
用 for...in 循环(需配合 hasOwnProperty 判断)
for...in 会遍历对象自身及其原型链上的可枚举属性,因此必须用 hasOwnProperty 过滤掉继承属性:
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]);
}
}
⚠️ 注意:不推荐在新代码中优先使用,容易遗漏判断导致意外行为;仅在需兼容非常旧环境(如 IE8)时考虑。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
用 Reflect.ownKeys() 获取所有自有属性名(含不可枚举和 Symbol)
如果对象包含不可枚举属性或 Symbol 类型的键,Object.keys() 和 for...in 都无法访问它们,此时可用:
-
Reflect.ownKeys(obj)返回包括字符串和 Symbol 的所有自有属性键 - 再结合
obj[key]获取对应值(Symbol 键需确保变量引用一致)
例如:
const sym = Symbol('id');<br>
const obj = { a: 1, [sym]: 'symbol-val' };<br>
Reflect.ownKeys(obj).forEach(key => console.log(key, obj[key]));
不建议的方式:JSON.stringify + 正则 或 for...of 直接遍历对象
对象不是可迭代对象(除非显式部署 [Symbol.iterator]),所以 for...of obj 会报错;而用 JSON.stringify 解析字符串再匹配键值,既低效又不可靠(比如值含引号、换行、嵌套结构等都会出问题)。
实际开发中,95% 场景用 Object.entries() 就够了——一行解构,语义明确,兼容性好(ES2017+,Babel 或现代浏览器都支持)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










