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)

.

iterator [ɪtə'reɪtə] 遍历器的更多相关文章

  1. ES6学习笔记(十三)Iterator遍历器和for...of循环

    1.概念 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有 ...

  2. Iterator(遍历器) 和 for...of 循环

    是generator的前置知识 generator :https://www.cnblogs.com/wangtong111/p/11322961.html 遍历器(Iterator)就是这样一种机制 ...

  3. Iterator遍历器 调用Symbol.Iterator属性,遍历器对象。

    Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员. 第二次调 ...

  4. Iterator、for..of,for...in和自定义遍历器**

    Iterator.for..of,for...in和自定义遍历器 Iterator: var arr = [1,2,3,4,5]; var ite = arr[Symbol.iterator](); ...

  5. ES6的Iterator遍历器

    JS表示集合的对象主要有Array.Set.Object.Map,在以前,遍历它们需要使用2种不同的方法,而现在,JS提出了Iterator机制,可以给不同的数据结构提供统一的遍历方法,就是for…o ...

  6. Java SE之For增强与Iterator遍历器提取数据(附Map.Entry)

    增强for循环: 1.操作数组 2.操作List集合 3.操作Map集合    1.map.values()法    2.map.keySet()法  [传统方法]    3.Map.Entry法   ...

  7. C++泛型编程(1)--自己实现C++迭代器/遍历器 iterator

    1.原理 迭代器又称为遍历器,用于访问容器中的数据,迭代器旨在算法和容器之间搭建访问的桥梁,从而使算法和数据分离,不用关心数据具体的存储细节.具体的原理描述请参考以下两个博客: [1].C++迭代器 ...

  8. Iterator 遍历器

    1.遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). 2.Iterator ...

  9. 【前端】【javascript】es6中的遍历器接口Iterator

    好久没发文章啦-.-为了证明我还活着,我决定从笔记里面抓一篇还算不乱比较像文章的发出来... 这些笔记是我在学es6的时候断断续续记录的,最近会一份一份整理陆陆续续发出来,顺便也自己再看一遍.我学习e ...

随机推荐

  1. BZOJ3289[JZYZOJP2018]: Mato的文件管理 莫队+树状数组+离散化

            描述 Description     Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号.为了防止他人偷拷,这些资料都是加密过的, ...

  2. BZOJ3238 [Ahoi2013]差异 SA+单调栈

    题面 戳这里 题解 考虑把要求的那个东西拆开算,前面一个东西像想怎么算怎么算,后面那个东西在建出\(height\)数组后相当于是求所有区间\(min\)的和*2,单调栈维护一波即可. #includ ...

  3. Mysql插入数据时,报错this is incompatible with sql_mode=only_full_group_by

    Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'inform ...

  4. AOP:声明式事务管理流程

    1. 注册BeanFactoryTransactionAttributeSourceAdvisor @EnableTransactionManagement --> @Import(Transa ...

  5. [转]ADT中通过DDMS导入文件出错ddms transfer error: Read-only file system,Failed to push selection: Read-only file system

    [已解决] 原文  http://www.crifan.com/ddms_import_file_error_transfer_error_read_only_file_system/ 想要通过adt ...

  6. Qt on android 蓝牙开发(控制小车)

    因为要做一个用蓝牙控制小车的app,就用着QT搞了下,网上关于QT蓝牙开发的资料比较少,我在这里记录下过程希望对看到了人有所帮助 首先在项目文件里添加 QT += bluetooth 这样就可以用QT ...

  7. Map中keySet和entrySet的区别

    在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, KeySet():将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代方式取出所有的键, ...

  8. Linux下使用SSH远程执行命令方法收集

    说明:可以做SSH免密登录之后执行,这样可以省去每次执行输入密码的提示. 对于简单的命令: 如果是简单执行几个命令,则: ssh user@remoteNode "cd /home ; ls ...

  9. Level-shifting nixes need for dual power supply

    The AD736 true-rms-to-dcconverter is useful for many applications that require precise calculation o ...

  10. Add margining capability to a dc/dc converter

    You can easily add margining capability—that is, the ability to digitally adjust the output voltage— ...