数组及对象几种遍历方式对比

157 阅读1分钟

数组

如下图,定义一个普通的数组 arr,arr 中包含4个元素。然后,为 arr 添加一个非数字键名的属性 name,一个不可枚举的属性 age,并在原型上添加一个属性 gender。

使用 5 种方式遍历该数组,根据上图,可看到区别如下:

  • for...in
    可得到数字索引属性、字母索引属性、原型上的属性,无法获取不可枚举属性

    for...in 得到的数字索引属性为 string 类型

  • for...of
    只可以得到数字索引的属性值
  • arr.keys()
    只可以得到数字索引的属性名
  • arr.entries()
    只可以得到数字索引的属性的键值对
  • Object.getOwnPropertyNames(arr)
    可以得到数组自身的所有属性,包括不可枚举属性,但是无法获取原型上的属性

对象

如下图,定义一个普通的对象 obj,具有 name 属性。然后,为 obj 添加一个不可枚举属性 age,并在原型上添加一个属性 gender。

使用 3 中方式遍历该对象,可看到区别如下:

  • for...in
    可得到对象自身、原型上的所有可枚举属性
  • Object.keys(obj)
    只能得到对象自身上的可枚举属性
  • Object.getOwnPropertyNames(obj)
    可以得到对象自身上的所有属性,包括不可枚举属性