千家信息网

ES6迭代器怎么实现

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容介绍了"ES6迭代器怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Iterator
千家信息网最后更新 2025年11月07日ES6迭代器怎么实现

本篇内容介绍了"ES6迭代器怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Iterator 是 ES6 引入的一种新的遍历机制,迭代器有两个核心概念:迭代器是一个统一的接口,它的作用是使各种数据结构可被便捷的访问,它是通过一个键为Symbol.iterator 的方法来实现。
迭代器是用于遍历数据结构元素的指针(如数据库中的游标)。

Iterator

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

  1. 迭代器是一个统一的接口,它的作用是使各种数据结构可被便捷的访问,它是通过一个键为Symbol.iterator 的方法来实现。

  2. 迭代器是用于遍历数据结构元素的指针(如数据库中的游标)。

迭代过程

迭代的过程如下:

  1. 通过 Symbol.iterator 创建一个迭代器,指向当前数据结构的起始位置

  2. 随后通过 next 方法进行向下迭代指向下一个位置, next 方法会返回当前位置的对象,对象包含了 value 和 done 两个属性, value 是当前属性的值, done 用于判断是否遍历结束

  3. 当 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}

上面的例子,首先创建一个数组,然后通过 Symbol.iterator 方法创建一个迭代器,之后不断的调用 next 方法对数组内部项进行访问,当属性 done 为 true 时访问结束。

迭代器是协议(使用它们的规则)的一部分,用于迭代。该协议的一个关键特性就是它是顺序的:迭代器一次返回一个值。这意味着如果可迭代数据结构是非线性的(例如树),迭代将会使其线性化。

可迭代的数据结构

以下是可迭代的值:

  1. Array


  2. String


  3. Map


  4. Set


  5. Dom元素(正在进行中)

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

Array

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

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

字符串是可迭代的,单他们遍历的是 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 创建的,不可迭代:

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

for...of循环

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

迭代常规数据类型

Array

const nums = ["zero", "one", "two"]; for (let num of nums) {  console.log(num);}TypedArrayconst typedArray1 = new Int8Array(6);typedArray1[0] = 10;typedArray1[1] = 11; for (let item of typedArray1) {  console.log(item);}

String

const str = "zero"; for (let item of str) {  console.log(item);}

Map

let myMap = new Map();myMap.set(0, "zero");myMap.set(1, "one");myMap.set(2, "two"); // 遍历 key 和 valuefor (let [key, value] of myMap) {  console.log(key + " = " + value);}for (let [key, value] of myMap.entries()) {  console.log(key + " = " + value);} // 只遍历 keyfor (let key of myMap.keys()) {  console.log(key);} // 只遍历 valuefor (let value of myMap.values()) {  console.log(value);}

Set

let mySet = new Set();mySet.add("zero");mySet.add("one");mySet.add("two"); // 遍历整个 setfor (let item of mySet) {  console.log(item);} // 只遍历 key 值for (let key of mySet.keys()) {  console.log(key);} // 只遍历 valuefor (let value of mySet.values()) {  console.log(value);} // 遍历 key 和 value ,两者会相等for (let [key, value] of mySet.entries()) {  console.log(key + " = " + value);}

可迭代的数据结构

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

const arrayLink = {length: 2, 0: "zero", 1: "one"}
// 报 TypeError 异常for (let item of arrayLink) {  console.log(item);} // 正常运行// output:// zero// onefor (let item of Array.from(arrayLink)) {  console.log(item);}

let 、const 和 var 用于 for..of

如果使用 let 和 const ,每次迭代将会创建一个新的存储空间,这可以保证作用域在迭代的内部。

const nums = ["zero", "one", "two"]; for (const num of nums) {  console.log(num);}// 报 ReferenceErrorconsole.log(num);

从上面的例子我们看到,最后一句会报异常,原因 num 的作用域只在循环体内部,外部无效,具体可查阅 let 与 const 章节。使用 var 则不会出现上述情况,因为 var 会作用于全局,迭代将不会每次都创建一个新的存储空间。

const nums = ["zero", "one", "two"]; forv (var num of nums) {  console.log(num);}// output: twoconsole.log(num);

"ES6迭代器怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

迭代 数据 数据结构 结构 方法 作用 对象 数组 顺序 循环 两个 元素 普通 位置 例子 属性 类型 过程 便捷 相同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 抖音数据库设置 山东省网络安全等级测评机构 网络安全风险隐患通报 相关网络安全主题基金 魔兽世界服务器登入不上去 c语言手机软件开发工具 端口映射虚拟服务器名称设置 office数据库文件安装 中国网络安全技术最强的公司 天堂w什么服务器 艾默生服务器电源监控管理系统 戴尔塔式服务器维修地址 温州应用软件开发服务 数据库怎么规定一个变量的长度 光源测试数据库坏了 神通数据库怎么查看授权期限 海康威视服务器远程管理默认端口 服务器tcp win mc租服务器卡吗 工会网络安全宣传活动总结 网络安全防护专业职业能力证书 长宁区品牌软件开发质量保障 新建goods数据库表 交换机可以接2个服务器吗 什么是云技术什么是数据库 新罗区凡达凡网络技术 最近为什么网络安全 今日头条数据库表 数据库数字类型大全 学linux好还是学网络安全好
0