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)

    .

  • 相关阅读:
    uva 10306
    系统学习Linux的11点建议
    SharePoint 2013 讨论板列表"Connect to Outlook" 不可用解决方案
    Java可视化编程,基于布局管理器的UI设计
    【JavaScript脚本编程技术详解-----(一)】
    一个百度程序员的创业故事
    HDU 4729 An Easy Problem for Elfness (主席树,树上第K大)
    Android SQLite Database Tutorial
    最优化方法在图像处理中的应用【4】
    [置顶] 编辑框Editext光标最后显示
  • 原文地址:https://www.cnblogs.com/crazycode2/p/6665237.html
Copyright © 2011-2022 走看看