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

数组

如下图,定义一个普通的数组 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)
    可以得到对象自身上的所有属性,包括不可枚举属性

转载于:https://juejin.im/post/5ac31e34f265da238059d524

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值