JavaScript遍历对象需据需求选择:for...in遍历自身及原型可枚举属性(需hasOwnProperty过滤),Object.keys()仅遍历自身可枚举字符串键,Reflect.ownKeys()最全面(含不可枚举字符串键和所有Symbol键)。

JavaScript中遍历对象有多种方法,核心区别在于:是否遍历自身属性、是否包含不可枚举属性、是否处理Symbol键、是否递归嵌套。选哪种取决于具体需求。
for...in 循环(最常用,但要注意过滤)
遍历对象自身及原型链上所有可枚举属性(包括继承的)。实际使用时必须配合 hasOwnProperty() 过滤掉继承属性:
- 只遍历自身可枚举属性:
for (let key in obj) { if (obj.hasOwnProperty(key)) { console.log(key, obj[key]); } } - 不推荐直接用,容易误遍历原型方法(比如给
Object.prototype加了方法就会被遍历到) - 会自动将数字键转为字符串,也支持字符串键和Symbol键?不支持——
for...in忽略 Symbol 类型的键
Object.keys() + forEach / for...of(推荐用于自有可枚举字符串键)
返回一个由对象自身可枚举属性名(字符串)组成的数组,不包含Symbol键、不可枚举属性或原型链属性:
Object.keys(obj).forEach(key => console.log(key, obj[key]));for (const key of Object.keys(obj)) { console.log(key, obj[key]); }- 简洁安全,是日常开发中最常用的组合
Object.getOwnPropertyNames() + Object.getOwnPropertySymbols()
若需完整获取所有自有属性(含不可枚举字符串键 + 所有Symbol键),需两者结合:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“Java免费学习笔记(深入)”;
const keys = Object.getOwnPropertyNames(obj); // 字符串键(含不可枚举)const symbols = Object.getOwnPropertySymbols(obj); // Symbol键(无论是否可枚举)- 合并后遍历:
[...keys, ...symbols].forEach(key => console.log(key, obj[key])); - 适合调试、序列化、深克隆等需要“完整属性快照”的场景
Reflect.ownKeys()(ES6+,一揽子获取所有自有键)
返回包含所有自有属性键的数组:字符串键(含不可枚举)+ Symbol键(无论是否可枚举),顺序按添加顺序(字符串在前,Symbol在后):
Reflect.ownKeys(obj).forEach(key => console.log(key, obj[key]));- 比手动合并
getOwnPropertyNames和getOwnPropertySymbols更简洁 - 现代代码中建议优先使用,语义清晰、覆盖全面
不复杂但容易忽略细节:遍历前先想清楚——要继承属性吗?要Symbol吗?要不可枚举属性吗?选对方法,代码更健壮。









