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 ​

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