美文网首页es6
阮一峰es6要点总结——遍历器

阮一峰es6要点总结——遍历器

作者: 布蕾布蕾 | 来源:发表于2017-04-11 13:12 被阅读42次

笔记,总结摘录自阮一峰

Iterator基本概念

Iterator(遍历器)是一种接口,为不同的数据结构提供统一的遍历机制。

主要供for...of...循环使用。

一个例子来说明,遍历器生成函数和遍历器对象:

比如对某数组arr进行for...of...操作,会调用arr上的Symbol.iterator函数,返回一个遍历器对象,供for...of...遍历。
一个遍历器对象应必须有next()方法,可以有也可以没有return(),throw()方法。
遍历过程:

  • 创建一个指针对象,指向arr的起始位置,也就是说,遍历器本质上,就是一个指针对象。
  • 第一次调用指针对象的next()方法,可以将指针指向数据结构的第一个成员
  • 第二次低啊用指针对象的next()方法,指向第二个成员
  • 多次调用,直到数据结构的尾部。
    每次调用next()方法,都会返回一个包含value,done两个属性的对象。value是当前成员,done是一个布尔值,表示遍历是否结束(为true时,表示结束)。

根据以上过程,可以总结如下

  • ES6的遍历操作本质上是调用了Symbol.iterator接口,这样的操作有
  • 结构赋值
  • 扩展运算符(...)
  • yield*
  • for...of...
  • ES6中以数组作为参数的情况
  • 有的数据结构原生具有遍历器接口,我们可以直接调用,。
    原生具有遍历器接口的有:
  • 数组
  • Set、Map结构
  • 某些类数组对象(字符串、DOM NodeLIst、arguments
  • Generator 对象
  • 而没有原生遍历器接口的,可以通过自定义Symbol.iterator函数,来实现。

Iterator接口与Generator函数

var myIterable = {};

myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable] // [1, 2, 3]

// 或者采用下面的简洁写法

let obj = {
  * [Symbol.iterator]() {
    yield 'hello';
    yield 'world';
  }
};

for (let x of obj) {
  console.log(x);
}
// hello
// world

for...offor...in

  • for...in遍历操作:为对象遍历设计的,并不非常适用于数组。当遍历数组时会存在以下问题:

  • 数组键名是数字,但是for...in循环以字符串作为键名‘0’,‘1’,‘2’

  • for...in循环不仅遍历数字键名,还会遍历手动添加的其他键,也包括原型链上的键

  • 某些情况下,for...in循环会以任意顺序遍历键名。

  • for...of解决了以上的问题。

  • 可以配合数组、Set等结构的entries()keys()values()方法,实现不同的遍历。

  • 不存在for...in的缺点。

  • 可以正确识别32位UTF-16字符

相关文章

  • 阮一峰es6要点总结——遍历器

    笔记,总结摘录自阮一峰 Iterator基本概念 Iterator(遍历器)是一种接口,为不同的数据结构提供统一的...

  • 实现数组去重的多种方法

    ES6 Array.from将类数组对象和可遍历的对象转换为数组 阮一峰ES6 ES5

  • Iterator 和 for...of循环

    参考:阮一峰Iterator 和 for...of循环 1.遍历器的概念遍历器(Iterator)就是一种接口,为...

  • 阮一峰es6要点总结——Proxy

    笔记,完全摘录自阮一峰 proxy的概念 proxy英文原意是代理的意思,在ES6中,可以翻译为"代理器"。它主要...

  • 阮一峰es6要点总结——Generator

    笔记,总结摘录自阮一峰笔记中有不少自己看书的总结 基本概念 核心目的:异步编程解决方案 关键概念:状态机,执行权限...

  • es6 部分方法总结

    部分列子引用的阮一峰ES6教程中的例子 这篇文章主要是自己经常用得一些方法总结, 想全篇学习es6, 可以看阮一峰...

  • ES6数值扩展

    阮一峰大神的ES6数值篇已经写的很好很全,下边贴出链接,然后斗胆写一点自己学习的总结。阮一峰ES6数值扩展我准备从...

  • 阮一峰es6要点总结——解构赋值

    原文地址 解构赋值 核心思想——模式匹配 基本概念 用法: 数组解构赋值 对象解构赋值 字符串解构赋值 数值和布尔...

  • 1、let和const命令

    阮一峰《ES6 标准入门》 笔记阮一峰 博客案例 在ES6中,我们通常实用 let 表示变量,const 表示常量...

  • 阮一峰es6要点总结——数值的扩展

    笔记,完全摘录自阮一峰 1. 扩展Number内置对象上的方法 扩展方法 原全局方法,现挂载到Number对象,避...

网友评论

    本文标题:阮一峰es6要点总结——遍历器

    本文链接:https://www.haomeiwen.com/subject/pllyattx.html