首页 > 其他分享 >前端打怪之旅=>Es6入门(迭代器、生成器)

前端打怪之旅=>Es6入门(迭代器、生成器)

时间:2023-10-17 20:32:05浏览次数:41  
标签:Es6 遍历 console log iterator 生成器 next 打怪 let

迭代器

迭代器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口!就可以完成遍历操作。

  1. ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for.of消费
  2. 原生具备iterator接口的数据(可用for of遍历)
  1. Array
  2. Arguments
  3. Set
  4. Map
  5. String
  6. TypedArray
  7. NodeList
  1. 工作原理
  1. 创建一个指针对象,指向当前数据结构的起始位置
  2. 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
  3. 接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
  4. 每调用next方法返回一个包含value和done属性的对象

使用for

        //声明一个数组
        const xiyou=['玄奘','悟空','悟能','悟净']
        //使用for...of遍历
        for(let v of xiyou){
            console.log(v);
        }
    //声明一个数组
    const xiyou=['玄奘','悟空','悟能','悟净']
    //使用for...of遍历
    for(let v in xiyou){
        console.log(v);
    }

of循环是得到变量的值,in循环是得到索引

使用迭代器

        const xiyou=['玄奘','悟空','悟能','悟净']
        let iterator = xiyou[Symbol.iterator]()
        console.log(iterator.next())
        console.log(iterator.next())
        console.log(iterator.next())
        console.log(iterator.next())

自定义遍历数据

            const cl = {
            name: '高一八班',
            stu: ['小明', '小红', '小亮', '小强'],
                [Symbol.iterator]() {
                    //索引变量
                    let index = 0;
                    //
                    let _this = this;
                    return {
                        next: function() {
                            if (index < _this.stu.length) {

                                const result = {
                                    value: _this.stu[index],
                                    done: false
                                };
                                //下表自增
                                index++;
                                return result;
                            }else{
                                return {value:undefined,done:true}
                            }

                        }
                    };
                }
        }

        //遍历对象 for of
        for (let v of cl) {
            console.log(v)
        }

如果单纯的使用for遍历对象里的元素会报错

        //遍历对象 for of
        for (let v of cl) {
            console.log(v)
        }
    // 迭代器.html:21 
    //Uncaught SyntaxError: Unexpected token 'class' (at 迭代器.html:21:10)
</script>

也就是说,如果我们想自定义遍历某些元素,就要满足他的工作原理,根据他的工作原理来写代码

生成器

定义使用

生成器数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同

            //yield 函数代码的分隔符
            function * gen(){
                // console.log("hello generator")
                console.log(111)
                yield '两只老虎';
                console.log(222)
                yield '爱跳舞';
                console.log(333)
                                
            }
            
            let iterator = gen();
            iterator.next();
            iterator.next();
            iterator.next();
            iterator.next();

通过next方法来控制代码的执行

前端打怪之旅=>Es6入门(迭代器、生成器)_数据结构

          function * gen(){
                // console.log("hello generator")
                console.log(111)
                yield '两只老虎';
                console.log(222)
                yield '爱跳舞';
                console.log(333)
            }           
            
            for (let v of gen()){
                console.log(v)
            }

前端打怪之旅=>Es6入门(迭代器、生成器)_数据结构_02

函数参数

生成器可以传参数

可以构造器传参也可以next方法传参

        function * gen(arg){
                console.log(arg)
                let one =  yield 111;
                console.log(one)
                yield 222;
                yield 333;
            }
            let iterator = gen('aaa');
            console.log(iterator.next())
            //next 方法可以传入实参
            console.log(iterator.next('BBB'))

前端打怪之旅=>Es6入门(迭代器、生成器)_工作原理_03

标签:Es6,遍历,console,log,iterator,生成器,next,打怪,let
From: https://blog.51cto.com/u_15915681/7908995

相关文章

  • 开课吧前端1期.阶段4-2:es6的新特性
    es6介绍:太有用了,后面会经常用到的都是ES6,不可能是ES5,ES4ES6:是简称,全称为:ECMAScript标准ECMAScript和JavaScript不是相同的一个东西ECMAScript是一个标准,JavaScript是语言一个实现可以有很多语言去实现,但是目前只有JavaScript这一种实现了ECMAScript标准【中间倒闭......
  • ES6 module模块
    概述ES6中的module指的是JavaScript模块化规范中的一种。它通过export和import语法来导出和导入模块中的变量、函数、类等内容。使用ES6模块化的好处包括:解决了模块化的问题。消除了全局变量。管理加载顺序。使用在ES6模块中,一个文件代表一个模块当使用script标签加载模块时,需要......
  • es6
    let和var的区别变量声明提升暂时性死区不允许重复声明块级作用域(函数作用域,全局作用域-用函数作用域(匿名立即执行函数表达式)代替块级作用域)不与全局对象挂钩(window,global,self,globalThis)变量的结构赋值(数组,对象-原型链上也可-包装类型也可)用途交......
  • 前端打怪之旅=>Es6入门(对象简化写法、函数)
    对象的简化写法ES6允许在大括号里面,直接写入变量和函数,作为对象的属性和方法这样的书写更加简洁letname='浅辄';letchange=function(){console.log('我可以改变世界');}constschool={......
  • 七、ES6之class类
    一、class基本语法JavaScript语言中,编写一个学生类,代码如下:(prototype可以个对象添加属性和方法)functionStudent(stuno,stuname){ this.stuno=stuno; this.stuname=stuname;}Student.prototype.stusex="";Student.prototype.sayHi=function(){ console.log("大......
  • Python中的迭代器与生成器
    迭代:迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器:迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter()和next()。字符串,列表或元组对象都......
  • 抽象工厂和生成器模式
              ......
  • es6新特性1
    let和const命令let声明的变量在代码块内有效let不允许重复声明let不存在变量提升console.log(a);vara=1;//输出undefinedconsole.log(b);letb=1;//报错UncaughtReferenceErrorconst声明只读的常量const一旦声明变量,就必......
  • es6之Promise对象
    1.简介1、是一种异步编程的解决方案,主要是解决异步回调的问题2、所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同......
  • springboot中的代码生成器
    springboot可以集成MyBatis-Plus代码生成器,如何想要快速开发或者考试可以试用一下。我参看下面这篇博客弄的:Mybatis-Plus自动生成代码,自定义Controller_mybatisplus生成controller-CSDN博客有些好用 ......