es6的解构赋值与Iterator、以及 for of

本篇文章摘自阮一峰著作《es6标准入门》的部分笔记,本人加以整理和解读

1.解构赋值

        es6允许按照一定的模式,可以从数组和对象中提取值

数组解构

        let [a,b,c] = [1,2,3]  //分别赋值给abc为123

        let [ foo,[ [bar] , baz ] ] = [ 1, [ [ 2 ], 3 ] ] //foo bar baz = 1 2 3

对于数组来说,两边的模式要相同

        过滤掉一部分

            let [,,a] = [1,2,3]

            console.log(a) //3

             let [a,,,...b] = [1,2,3,4,5,6,7,8,9]

             console.log(a,b) // 1    [4,5,6,7,8]

        不完全结构

              let [a,[b,c],d] = [1,[2],3]

              console.log(a,b,c,d) // 1 2 undefined 3

              let [a,[b],c] = [1,[2,3],4]

              console.log(a,b,c) // 1 2 4

        默认值

                如果带了默认值,在结构的结果为undefined的时候,就会以默认值为值,如下例子

                let [ x = 1 ]  = [5]   //x=5

                let [x=2] = []   //x=2

                let [x=2] = [undefined]  //x=2

       对象解构

         let {foo,bar} = {foo:1,bar:2}   //foo 1     bar 2

                更改名字使用:

         let {foo:baz,bar} = {foo:1,bar:2}

                baz  // 1  foo是模式匹配,baz才是真正的变量

        

        let node = {

            loc:{

                start:{

                    line:1,

                    colum:5

                }

            }

        }

        let {loc,loc:{start},loc:{start:{line}}} = node

        console.log(loc,start,line)  //start{...}   {line:1,colum:5}  1

Iterator

        遍历器,主要是对数组 对象 map set进行遍历

        任何数据类型,只要部署了 iterator 接口,都可以遍历

iterator工作过程

        1.创建一个指针对象,指向当前数据结构的起始位置

        2.第一次调用对象指针的next 方法,可以将指针指向数据的第一个成员

        3.第二次调用对象指针的next方法,就指向第二个成员

        4.不断调用next方法,直到指向最后一个成员

例如:

        

               let str = 'abcdeftghjkl'

            let iter = str[Symbol.iterator]()

            // console.log(iter.next()) a

使用 for of 一次性循环遍历

            for(let i of str){

                console.log(i)

            }

一个数据结构,只要部署了Symbol.iterator属性,就被视为有iterator接口,就可以使用 for of 来循环遍历他的成员

        let obj = {

            [Symbol.iterator]:function(){

                return {

                    next(){

                    

                    }

                }

            }

        }

       如上,对象默认是没有iterator接口的,要想用,那就得给对象配置一个[Symbol.iterator]接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值