ES6--Iterator和for......of详解

ES6 规定,默认的 Iterator 接口部署在数据结构的Symbol.iterator属性。
或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。

默认了部署了Iterator的数据有:
Array Map Set String 类数组对象 TypedArray arguments NodeList对象

一个对象要想被for…of遍历,必须部署Iterator,或者在其原型上部署Iterator,普通对象并没有部署Iterator,如果用for…of遍历,会抛出“not iterable”错误

那么普通对象到底要怎样才能被for…of遍历?

1、利用Object.keys得到对象的键名然后遍历这个数组

for (var key of Object.keys(someObject)) {
  console.log(key + ': ' + someObject[key]);
}

2、Iterator的遍历过程看着像Generator,Generator可以很简单就实现Iterator接口,所以第二种方法就是利用Generator方法将对象包装一下

function* entries(obj) {
  for (let key of Object.keys(obj)) {
    yield [key, obj[key]];
  }
}

for (let [key, value] of entries(obj)) {
  console.log(key, '->', value);
tips:什么是类数组对象

avaScript中,数组是一个特殊的对象,其property名为正整数,且其length属性会随着数组成员的增减而发生变化,同时又从Array构造函数中继承了一些用于进行数组操作的方法。

而对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情况下,这些对象被称为“类数组对象”。

可以使用数组中的方法,例如可以使用slice()方法获取类数组对象上的子数组,可以使用join方法来连接成为数组。

注意:
在浏览器环境中,document.getElementsByTagName()语句返回的就是一个类数组对象。
在function调用中,function代码内的arguments变量(保存传入的参数)也是一个类数组对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值