文章目录

  • Iterator
    • 1 介绍
    • 2 迭代过程
    • 3 可迭代的数据结构
      • 普通对象不可迭代
    • for...of循环
      • 可迭代的数据结构
      • 可迭代的数据结构

Iterator

1 介绍

Iterator 是 ES6 引入的一种新的遍历机制,迭代器有两个核心概念:

  • 迭代器是一个统一的接口,它的作用是使各种数据结构可被便捷的访问,它是通过一个键为Symbol.iterator 的方法来实现。
  • 迭代器是用于遍历数据结构元素的指针(如数据库中的游标)。

2 迭代过程

迭代的过程如下:

  • 创建:通过 Symbol.iterator 创建一个迭代器,指向当前数据结构的起始位置
  • 迭代指向:通过 next 方法进行向下迭代指向下一个位置, next 方法会返回当前位置的对象,对象包含了 value 和 done 两个属性,
    1. value 是当前属性的值;
    2. done 用于判断是否遍历结束。
  • 当 done 为 true 时则遍历结束

Demo:

  • 首先声明一个数组,通过Symbol.iterator创建一个迭代器,之后通过.next()方法对数组内的数据项进行访问,返回value和done两个属性,value表示访问的当前数据项,done是布尔值,当为true时遍历结束。
  • 迭代器是协议(使用它们的规则)的一部分,用于迭代。该协议的一个关键特性就是它是顺序的:迭代器一次返回一个值。这意味着如果可迭代数据结构是非线性的(例如树),迭代将会使其线性化。
const items = ["zero", "one", "two"];
const it = items[Symbol.iterator]();it.next();
>{value: "zero", done: false}
it.next();
>{value: "one", done: false}
it.next();
>{value: "two", done: false}
it.next();
>{value: undefined, done: true}

3 可迭代的数据结构

以下是可迭代的值:

  • Array
  • String
  • Map
  • Set
  • Dom元素(正在进行中)

使用 for…of 循环(参见下文的 for…of 循环)对数据结构进行迭代。

  • Array

数组 ( Array ) 和类型数组 ( TypedArray ) 他们是可迭代的。

for (let item of ["zero", "one", "two"]) {  console.log(item);
} // output: // zero // one // two
  • String

字符串是可迭代的,单他们遍历的是 Unicode 码,每个码可能包含一个到两个的 Javascript 字符。

for (const c of 'z\uD83D\uDC0A') {    console.log(c);
} // output: // z // \uD83D\uDC0A
  • Map

Map 主要是迭代它们的 entries ,每个 entry 都会被编码为 [key, value] 的项, entries 是以确定的形势进行迭代,其顺序是与添加的顺序相同。

const map = new Map();
map.set(0, "zero");
map.set(1, "one");
for (let item of map) {  console.log(item);
} // output: // [0, "zero"] // [1, "one"]

注意: WeakMaps 不可迭代

  • Set

Set 是对其元素进行迭代,迭代的顺序与其添加的顺序相同

const set = new Set();
set.add("zero");
set.add("one");
for (let item of set) {  console.log(item);
} // output: // zero // one

注意: WeakSets 不可迭代

  • arguments

arguments 目前在 ES6 中使用越来越少,但也是可遍历的

function args() {  for (let item of arguments) {   console.log(item);  }
}
args("zero", "one"); // output: // zero // one

普通对象不可迭代

普通对象是由 object 创建的,不可迭代:

// TypeError for (let item of {}) {   console.log(item); }

for…of循环

for…of 是 ES6 新引入的循环,用于替代 for…in 和 forEach() ,并且支持新的迭代协议。它可用于迭代常规的数据类型,如 Array 、 String 、 Map 和 Set 等等。

可迭代的数据结构

of 操作数必须是可迭代,这意味着如果是普通对象则无法进行迭代。如果数据结构类似于数组的形式,则可以借助 Array.from() 方法进行转换迭代。

p 和 Set 等等。

可迭代的数据结构

of 操作数必须是可迭代,这意味着如果是普通对象则无法进行迭代。如果数据结构类似于数组的形式,则可以借助 Array.from() 方法进行转换迭代。

ES6 lterator迭代器是个什么东西?有什么用?相关推荐

  1. es6相关面试题:1.rest参数;2.new.target;3.object.defineProperty与Proxy的区别;4.Reflect对象作用;5.lterator迭代器;6.async

    文章目录 说说对ES6中rest参数的理解 说说你对new.target的理解 谈谈object.defineProperty与Proxy的区别 ES6中的Reflect对象有什么用? 简单介绍下ES ...

  2. lterator 迭代器 静态属性Symbol.iterator Symbol(Symbol.iterator)

    ** lterator迭代器 ** 迭代模式:提供一种方法是可以顺序获得聚合对象中的各个元素,是一种最简单也最常见的设计模式.他可以让用户透过特定的接口巡防集合中的每一个元素而不用了解底层的实现 迭代 ...

  3. java集合 — — lterator迭代器

    二.lterator迭代器 2.1.Iterator接口 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口.java.util.Iterator.Iterator 接 ...

  4. [ES6] 细化ES6之 -- 迭代器与生成器

    Symbol Symbol是什么 ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值 Symbol 值通过Symbol函数生成 let symbol = Symbol(); consol ...

  5. ES6 - lterator

    1. 迭代器(内部迭代器和外部迭代器) 迭代模式: 提供一种方法顺序获得集合对象中的各个元素,是一种最简单也是最常见的设计模式,提供特定的接口. 内部迭代器: 本身是函数,定义好内部迭代规则,外部只需 ...

  6. ES6(迭代器、Set、Map、数组去重)

    目录 迭代器Iterator Iterator 的作用 原生具备 Iterator 接口的数据结构 Iterator 的遍历过程 迭代器实现了Iterator接口,只要实现了Iterator就可以使用 ...

  7. 深入理解ES6之迭代器与生成器

    迭代器 迭代器 iterator,在 Javascript 中,迭代器是一个对象(也可称作为迭代器对象),它提供了一个 next() 方法,用来返回迭代序列中的下一项. next 方法的定义,next ...

  8. Java:Lterator迭代器

    目录 Iterator接口 java.util.Iterator 迭代器的实现原理 for each (内置迭代器) Iterator接口 java.util.Iterator 在程序开发中,经常需要 ...

  9. es6 --- 自制迭代器

    对象 对象如下 const obj ={left: 100,top: 200 } 不可迭代 for(let attr of obj){console.log(attr); } 迭代规则 可迭代,所具有 ...

最新文章

  1. 编写程序记录文件位置
  2. springboot 日志 log4j
  3. Android Studio安装配置、环境搭建详细步骤及基本使用
  4. postman 安装失败_【Postman】14 Postman与Jenkins集成使用
  5. asp.net与JAVASCRIPT函数的相互调用
  6. Nginx根据User-Agent适配PC和手机
  7. 蓝桥杯 ALGO-111 算法训练 明明的随机数
  8. python下载numpy库_安装numpy库
  9. notepad++查看aspx
  10. (秒杀项目) 4.9 削峰限流与防刷(核心)
  11. 程序设计导引及在线实践之显示器
  12. 如何下载全国行政边界线(国界、省界、县界、乡镇界)
  13. 3W字,Docker 从入门到精通
  14. 智能暖风机——4.暖风机外设驱动实现
  15. VC浏览器的定制与扩展
  16. Pytorch3D_上手学习3D的AI模型
  17. 电脑长期未用或深度放电,电池欠压充不上电(充电指示灯不亮)
  18. python人机对战_【人机对战】用python打造经典井字游戏
  19. TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
  20. 完整的项目管理流程包括什么?

热门文章

  1. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java后台投票网站系统9h37l
  2. python 字符串和数字组合变量名
  3. 三极管基极下拉电阻的作用
  4. c语言程序π,C语言求圆周率π(三种方法)
  5. 单片机介绍与内部结构
  6. 微信小程序中进行公共数据的存储使用
  7. Visual Assist X 10.6.1837.0 Cracked
  8. 调用百度人体属性检测api进行人员预标注
  9. java socket实现的简易的聊天工具demo
  10. TS协议解析第三部分(PES)