zoukankan      html  css  js  c++  java
  • iterator [ɪtə'reɪtə] 遍历器

    lterator 遍历器

    遍历器是一种接口,它为不同的数据结构提供了统一的访问机制。

    如果一个数据结构具有遍历器接口,那么就可以依次处理该数据结构的成员。

    当前 javascript 用来表示集合的数据结构有四种,分别为数组、对象、Set和Map,并且这四种数据结构可以相互嵌套使用,比如:数组的成员可以是对象,对象的成员又可以是Set等等。

    一、遍历器接口

    如果一个结构具有Symbol.lterator属性,那么就称这个数据结构具有遍历器接口

    Symbol.Iterator 返回Symbol对象的lterator属性,这是一个预定义好的、类型为Symbol的特殊值。

    Symbol.Iterator 属性指向一个方法,调用此方法返回一个遍历器对象,它是一个指针对象,默认指向数据结构的起始位置。

    let arr = ['百度网',4,'www.baidu.com','北京大学']
    
    let it = arr[Symbol.iterator]()  // 定义循环器
    
    console.log(it.next())
    console.log(it.next())
    console.log(it.next())

    //每一次调用next()方法都会返回一个对象,此对象包含 value 和 done 属性,value属性值是数据结构成员的值,如果遍历完成,value属性值为 undefined; done属性是一个布尔值,如果为 true,说明遍历完成,如果为false,说明遍历尚未完成。

    function studyEs6() {
      let arr = ['百度网',4,'www.baidu.com','北京大学']
      let it = arr[Symbol.iterator]()
      for(;;){  // 相当于一个while(true){} 循环,但是性能要快四倍
        let elem = it.next()
        if(elem.done){
          break
        }
        console.log(elem.value)
      }
    }

    二、默认具有遍历器接口的数据结构, for of 循环

    当对一个数据结构使用for of 循环遍历的时候,会自动调用遍历器接口。

    ES6中有四类数据结构默认具有遍历器接口:

    (1) 数组

    例如:

    let arr = [1,2,3,'aa','bb','cc']
    
    for (let elem of arr) {
      console.log(elem)
    }

    (2) 某些类数组

    例如:

    let obj = {
      data:['aa','bb','cc',3,9,8],
      [Symbol.iterator]() {
        const self = this
        let index = 0
        return {
          next() {
            if(index < self.data.length){
              return {
                value.self.data[index++]
                done: false
              }
            }else{
              return (value:undefined,done:true)
            }
          }
        }
      }
    }
    
    let it = obj[Symbol.iterator]()
    console.log(it.next().value)

    (3) Map

    (4) Set

    三、展开运算符

    如果一个数据结构具有遍历器接口,那么除了可以使用for of 循环以外,也可以使用展开运算符。

    代码实例如下:

    let arr = ['百度网',4,'www.baidu.com']
    
    console.log(...arr)

    .

  • 相关阅读:
    【探路者】团队Alpha周贡献分数分配结果
    2017秋-软件工程第七次作业-第八周例行总结
    2017秋-软件工程第七次作业(2)-【探路者】Alpha周(2017年10月19)贡献分配规则和分配结果
    2017秋-软件工程第七次作业(1)-【探路者】贪吃蛇阿尔法发布展示(视频展示)
    2017秋-软件工程第七次作业(1)-【探路者】贪吃蛇阿尔法发布
    名词1
    Jsp1
    代码,python1
    关于键盘
    代码,java_web
  • 原文地址:https://www.cnblogs.com/crazycode2/p/6665237.html
Copyright © 2011-2022 走看看