ES6 迭代器 可迭代协议 与 for-of 循环 (详解)

新手必看ES6语法:for...of循环用法详解 深入讲解ES6语法中for...of循环的使用场景与优势,对比传统遍历方式,帮助开发者更高效处理可迭代对象,掌握es6语法新特性提升编码效率。 阅读详情

迭代器背景知识

1.什么是迭代?

  • 从一个数组集合中按照一定的顺序,不断取出数据的过程

2.迭代和遍历的区别?

  • 迭代强调的是依次取数据并不保证去多少,也不保证把所有的数据取完
  • 便利强调的是要把整个数据依次全部取出

3.迭代器

  • 对迭代过程封装,在不同语言中的表现形式,通常为对象

4.迭代模式

是一种设计模式,用于统一迭代过程,并规范了迭代器规格:

  • 迭代器应该具有得到下一个数据的能力
  • 迭代器应该具有判断是否还有后续数据的能力

JavaScript中的迭代器

JS规定,如果一个对象具有next方法,并且该方法返回一个对象,该对象的格式如下:

{value: 值, done: 是否迭代完成}

则认为该对象是一个迭代器

含义:

  • next方法:用于得到下一个数据
  • 返回的对象
    • value:下一个数据的值
    • done:boolean,是否迭代完成

我们来讲举个例子


  const arr = [1, 2, 3, 4, 5];
        //迭代数组arr
        const iterator = {
            i: 0, //当前的数组下标
            next() {
                var result = {
                    value: arr[this.i],
                    done: this.i >= arr.length
                }
                this.i++;
                return result;
            }
        }

        //让迭代器不断的取出下一个数据,直到没有数据为止
        let data = iterator.next();
        while (!data.done) { //只要没有迭代完成,则取出数据
            console.log(data.value)
            //进行下一次迭代
            data = iterator.next();
        }

        console.log("迭代完成")

可迭代协议 与 for-of 循环

可迭代协议

概念回顾

  • 迭代器(iterator):一个具有next方法的对象,next方法返回下一个数据并且能指示是否迭代完成
  • 迭代器创建函数(iterator creator):一个返回迭代器的函数

可迭代协议

ES6规定,如果一个对象具有知名符号属性Symbol.iterator,并且属性值是一个迭代器创建函数,则该对象是可迭代的(iterable)

思考:如何知晓一个对象是否是可迭代的?
思考:如何遍历一个可迭代对象?

for-of 循环

for-of 循环用于遍历可迭代对象,格式如下

//迭代完成后循环结束
for(const item in iterable){
    //iterable:可迭代对象
    //item:每次迭代得到的数据
}

	<div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
    <div>9</div>
    <div>10</div>
    <script>
        const divs = document.querySelectorAll("div");


        // const iterator = divs[Symbol.iterator]()
        // let result = iterator.next();
        // while (!result.done) {
        //     const item = result.value; //取出数据
        //     console.log(item);
        //     //下一次迭代
        //     result = iterator.next();
        // }
        
		//同等于
        
        for (const item of divs) {
            console.log(item);
        }

展开运算符与可迭代对象

展开运算符可以作用于可迭代对象,这样,就可以轻松的将可迭代对象转换为数组。

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”? 对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。 阅读详情

相关推荐

数电-基于FPGA的自动售货控制系统设计

本次数电的课程设计是设计一款基于FPGA的自动售货控制系统,因为手上暂时没有FPGA的板子,所以先采用proteus仿真进行设计,观察系统效果,等之后FPGA板子下发,再移到quartus上调试和下载。同样是自己第一次自主设计电路系统,可能在功能上不完整或者逻辑上有错误,大家多多包涵,欢迎沟通交流。

gg1067的博客 2292

展开运算符

展开运算符

m0_71814235的博客 4539

一步一步教你写股票走势图——K线图一(概述)

股票分时图部分已经开发完毕,受到了广大开发者的好评!界面、功能都挺完美,解决了好一些MP开发者的问题,博主甚是欣悦,更有动力去开源K线图。这里说一下,如果有问题直接留言或者发邮件,github上个人信息有邮件,我看到基本都会回复,博主不加qq的,体谅O(∩_∩)O。分析好了,废话不多说,我们分析下K线图吧,首先我们看下自选股K线图的效果吧效果还是很赞的,经过分时图的研究后,博主越来越确信自选股用的应

体验Android编程之美 3万+

【JavaScript】展开运算符详解

在展开对象时,结合计算属性名语法,可以动态设置属性名。展开运算符则用于将一个对象的所有属性展开到另一个对象中。展开运算符最初在ES6(ECMAScript 2015)中引入,主要用于数组,但在ES9(ECMAScript 2018)中扩展到了对象。展开运算符除了基本的数组和对象操作外,还可以在许多高级场景中使用,例如函数参数处理和嵌套结构的展开。展开运算符可以将一个对象的所有可枚举属性展开到另一个对象中,便于对象的合并和浅拷贝。展开运算符可以将一个数组展开成单独的元素,用于创建新的数组或函数调用。

lph159的博客 2969

八股文(Unity篇)

在Unity中,协程是通过迭代器实现的,即将协程函数的返回值类型定义为IEnumerator,然后使用yield语句暂停协程的执行,并在需要恢复执行时通过MoveNext()方法继续执行。Unity中的协程是一种能够在主函数中暂停和恢复执行的功能,它使用了C#的迭代器。Resources方式:Resources方式:使用Resources.Load方法加载Resources文件夹下的资源,这种方式的好处是简单易用,无需手动打包资源,但是会导致应用包变得较大,加载速度较慢,不适合较大的资源文件。

m0_50816320的博客 1万+

跨时钟域传输数据——单bit和多bit信号(总结)

总结单bit和多bit信号的跨时钟域传输

qq_42135020的博客 1万+

06-ES6语法:展开运算符

本文我们介绍ES6的展开运算符。展开运算符(spread operator)允许一个表达式在某处展开。展开运算符在多个参数(用于函数调用)或多个元素(用于数组字面量)或者多个变量(用于解构赋值)的地方可以使用。使用了大量了代码片段介绍了具体的使用方式,并且配上了屏幕录音进行详细解说。-_-

光脚丫思考的专栏 6万+

【DexGraspNet与多指手抓取算法详解】第三章 DexGraspNet数据集构建机理

抓取姿态描述多指手与物体的相对空间关系,包含手掌位姿与手指关节配置。

VectorShift的博客 498

...展开运算符

展开运算符(Spread Operator)是ES6中引入的一个新的语法,用于将数组或对象拆分成单个元素。在JavaScript中,我们通常需要将一个数组或对象的元素合并到另一个数组或对象中,这时候就可以使用展开运算符。使用展开运算符可以将一个数组拆分成单个元素,并将它们分别传递给函数,或者合并到另外的数组中。与数组类似,我们也可以使用展开运算符将一个对象拆分成单个元素,并将它们合并到另外一个对象中。我们可以使用展开运算符将其拆分成单个元素,并将它们合并到另一个对象。,同时将剩下的属性合并到一个新的对象。

qq_33782556的博客 828

【AI编程】Claude Code 最强AI 编程利器项目实战详解

Claude Code 最强AI 编程利器项目实战详解

congge 7397

python ERA-5气象数据NetCDF格式解析(一)

python ERA-5气象数据NetCDF格式解析

weixin_43896283的博客 2638

JavaScript中的迭代器:原理与使用

本文介绍了JavaScript中的迭代器及其应用。迭代器通过next()方法提供统一的数据遍历方式,支持数组、字符串、Map和Set等内置数据结构。文章详细展示了各类迭代器的使用方法,如数组的entries()、keys()和values(),以及如何通过生成器函数创建自定义迭代器(如斐波那契数列)。同时解释了可迭代对象的概念,即实现Symbol.iterator方法的对象。掌握迭代器能提升代码效率与可读性,是JavaScript开发的重要技能。

你若盛开,清风自来 423

模糊控制 (Fuzzy Control) 算法详解及案例分析

模糊控制是一种基于模糊逻辑的控制策略,其核心思想是通过模糊规则和模糊推理实现对复杂系统的控制。模糊控制不依赖于精确的数学模型,而是通过模拟人类的决策过程来处理不确定性和非线性问题。

闲人编程的博客 3657

ES6之迭代器

什么是迭代器? 迭代器是被设计专用于迭代的对象,带有特定接口。所有的迭代器对象都拥有 next() 方 法,会返回一个结果对象。该结果对象有两个属性:对应下一个值的 value ,以及一个布尔 类型的 done ,其值为 true 时表示没有更多值可供使用。迭代器持有一个指向集合位置的 内部指针,每当调用了 next() 方法,迭代器就会返回相应的下一个值。 若你在最后一个值返回后再调用 next...

仇益阳的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ES6 【可迭代对象】和【for-of】循环

/* 【可迭代对象】和【for-of】循环 可迭代对象具有 Symbol.iterator属性,是一种与迭代器密切相关的对象 在ECMAScript6中,所有的集合对象(数组,Set集合以及Map集合)和字符串都是可迭代的对象, 这些对象都有默认的迭代器。 for-of 循环...

qq_34579060的博客 831

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ES6中for...of循环和可迭代对象

ES6中for…of循环和可迭代对象 在之前,有很多方法可以遍历数组和对象 最经典的就是for循环,它可以遍历数组或者有索引且具有length属性的对象 // 遍历数组 let arr = [1, 2, 3] for (var i = 0; i < arr.length; i++) { console.log( arr[i] ) } // 结果 1 2 3 // 遍历对象 // 可以使用Object的keys()方法和values()方法分别获取键名和值进行遍历 let obj = {

我是段段的博客 2610

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

可迭代协议与for-of循环

上篇说到迭代可以按照一定的规则,从指定的空间中取出数据。区别于循环的是,迭代过程不知道数据的长度,也不知道要取多少个数据。迭代器(iterator)是一个具有next方法的对象,next方法返回下一个数据并且能指示是否迭代完成;迭代器创建函数是一个返回迭代器的函数。这一篇来讲一下可迭代协议和for-of循环。 1.可迭代协议 ES6规定,如果一个对象具有知名符号属性Symbol.iterator,并且属性值是一个迭代器创建函数,则该对象是可迭代的(iterable) 【注】判断一个对象是否可迭代,就是

桃花扇的博客 328

ES6中的for ... of循环和可迭代对象

推荐教程:《JavaScript视频教程》 本文将研究 ES6 的for ... of循环。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 旧方法 在过去,有两种方法可以遍历 javascript。 首先是经典的for i循环,它使你可以遍历数组或可索引的且有length属性的任何对象。 for(i=0;i<things.length;i++){ varthing=things[i] /*...*/ } 其次是for ......

qq_43067585的博客 336

ES6迭代器(Iterator)、可迭代协议、for-of循环

ES6迭代器、可迭代协议、for-of循环迭代器背景知识JS中的迭代器可迭代协议 与 for-of 循环可迭代协议for-of 循环展开运算符与可迭代对象 迭代器 背景知识 什么是迭代? 从一个数据集合中按照一定的顺序,不断取出数据的过程 迭代和遍历的区别? 迭代强调的是依次取数据,并不保证取多少,也不保证把所有的数据取完 遍历强调的是要把整个数据依次全部取出 迭代器 对迭代过程的封装,在不同的语言中有不同的表现形式,通常为对象 迭代模式 一种设计模式,用于统一迭代过程,并规范了迭代器规格:

一只勤劳的二哈的博客 250

可迭代协议 与 for-of 循环(ES6)

可迭代协议 与 for-of 循环 可迭代协议 概念回顾 迭代器(iterator):一个具有next方法的对象,next方法返回下一个数据并且能指示是否迭代完成 迭代器创建函数(iterator creator):一个返回迭代器的函数 可迭代协议 ES6规定,如果一个对象具有知名符号属性Symbol.iterator,并且属性值是一个迭代器创建函数,则该对象是可迭代的(iterable) 思考:如何知晓一个对象是否是可迭代的? 思考:如何遍历一个可迭代对象? for-of 循环 for-of 循环

lzDevastator的博客 219

ES6的迭代器与迭代协议Symbol.iterator

介绍ES6的迭代器与迭代协议。讲解Symbol.iterator和entries keys values提供的数组迭代器

weixin_42274805的博客 785

ES6 迭代器

Iterator Iterator 是 ES6 引入的一种新的遍历机制,迭代器有两个核心概念: 迭代器是一个统一的接口,它的作用是使各种数据结构可被便捷的访问,它是通过一个键为Symbol.iterator 的方法来实现。 迭代器是用于遍历数据结构元素的指针(如数据库中的游标)。 迭代过程 迭代的过程如下: 通过 Symbol.iterator 创建一个迭代器,指向当前数据结构的起始位置 随后通过 next 方法进行向下迭代指向下一个位置, next 方法会返回当前位置的对象,对象包含了 val

_ 1386

ES6——迭代器

迭代器一、迭代器1.什么是迭代?2.迭代和遍历的区别3.迭代器4.迭代模式5.JS中的迭代器二、可迭代协议与for-of循环1.可迭代协议2.for-of 循环3.展开运算符与可迭代对象三、生成器1.什么是生成器2.如何创建生成器3.书写一个生成器函数4.生成器函数内部是如何执行5.注意的细节6.生成器的其他API7.生成器应用-异步任务控制 一、迭代器 1.什么是迭代? 从一个数据集合中按照一定的顺序,不断取出数据的过程 2.迭代和遍历的区别 迭代强调的是依次取数据,并不保证取多少,也不保证把所有的数据取

xun__xing的博客 1343

for of迭代器协议

循环是 ES6 引入的一种遍历数据结构的统一方式,其核心基于。方法,该方法返回一个符合迭代器协议的对象。任何对象只要实现了迭代器协议,就可以被。协议要求对象必须实现一个。一个对象要成为可迭代对象,必须实现。ES6 中许多内置数据结构默认实现了。

weixin_45825917的博客 449

ES6 FOR OF 循环

目录介绍FOR...OF 循环 介绍 FOR…OF 循环 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script> ...

MoonNight608的博客 379

迭代协议----迭代器协议&可迭代协议

迭代器协议 产生的原因: JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set。这样就需要一种统一的接口机制,来处理所有不同的数据结构。迭代器(Iterator)就是这样一种机制。 它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。 是什么: 迭代器协议定义了产生一系列值(无论是有限个还是无限个)的标准方式。当值为有限个时,所有

qq_43239667的博客 1811
上一篇: HTML5 新增Api ''Fetch Api'' (详细概括)
下一篇: ES6 生成器 生成器应用----异步任务控制
苟盛
博客等级 码龄7年 13粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值