Skip to content

JS 基础:遍历对象

for..in 循环

  • 返回的是所有 可枚举 的属性,包括 实例原型 上的属性。
  • 如果只需要获取对象的实例属性,可以联合使用 hasOwnProperty() 进行过滤(过滤后等价 Object.keys())。
  • 不建议用来遍历 数组 查阅
  • 注意 for 中的闭包问题

Object.keys()

  • 返回的实例可枚举属性数组,不包括 原型
  • Object.values() 返回实例可枚举属性值数组,不包括原型
  • Object.entries() 返回实例可枚举键值对数组,不包括原型

Object.getOwnPropertyNames()

  • 返回的实例所有属性的数组,包括不可枚举属性,但不包括Symbol(注:Symbol可枚举),但不会获取原型上的属性。
  • Object.getOwnPropertySymbols() 返回自身的Symol属性。

Reflect.ownKeys()

  • 返回的实例所有属性的数组,包括不可枚举属性和Symbol。但不会获取原型上的属性。
  • 基本等于 Object.getOwnPropertySymbols+Object.getOwnPropertyNames

题外话:for..of

  • 适用范围:iterableArray, Map, Set, arguments 等)
  • 返回迭代器属性值
  • 扩展运算符(...)内部使用 for...of 循环