总结 7 种遍历对象的方式

65 阅读1分钟

1. for...in 循环

用法:

for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);
  }
}

说明:

  • 遍历对象自身和原型链上的可枚举属性。
  • 需要配合hasOwnProperty() 检查避免遍历原型链上的属性。
  • 遍历顺序不是按照定义的顺序,而是按照规范输出。
  • 不能遍历Symbol属性

2. Object.keys() + forEach()

用法:

Object.keys(obj).forEach(key => {
  console.log(key, obj[key]);
});

说明:

  • 通过返回键来访问对象的键和值
  • 只遍历自身的可枚举属性。
  • 不遍历Symbol属性。

3. Object.values()

用法:

Object.values(obj).forEach(value => {
  console.log(value);
});

说明:

  • 直接返回值,
  • 不包含键信息,不遍历 Symbol 属性

4. Object.entries()

用法:

Object.entries(obj).forEach(([key, value]) => {
  console.log(key, value);
});

说明:

  • 同时获取键值对;
  • 需要处理键值对的场景,这种方式更方便。

5. Object.getOwnPropertyNames()

用法:

Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key, obj[key]);
});

注意:

  • 返回对象自身不包含Symbol的所有属性,包括不可枚举属性。

javas

6. Reflect.ownKeys()

用法:

Reflect.ownKeys(obj).forEach(key => {
  console.log(key, obj[key]);
});

说明:

  • 返回对象自身的是所有键,包含Symbol和不可枚举属性。

for...of + Object.keys()

for (let key of Object.keys(obj)) {
  console.log(key, obj[key]);
}

说明:

  • 不遍历Symbol
  • 可以使用 breakcontinue