JavaScript中如何遍历对象_有哪些方法可用

14次阅读

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

JavaScript中如何遍历对象_有哪些方法可用

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键),需两者结合:

立即学习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]));
  • 比手动合并 getOwnPropertyNamesgetOwnPropertySymbols 更简洁
  • 现代代码中建议优先使用,语义清晰、覆盖全面

不复杂但容易忽略细节:遍历前先想清楚——要继承属性吗?要Symbol吗?要不可枚举属性吗?选对方法,代码更健壮。

text=ZqhQzanResources