博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6学习之Iterator和For...of循环
阅读量:4841 次
发布时间:2019-06-11

本文共 1237 字,大约阅读时间需要 4 分钟。

一.Iterator(它是一种接口,为各种不同的数据结构提供统一的访问机制。Iterator 接口主要供for...of消费)

默认Iterator接口(默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。Symbol.iterator属性本身是一个函数)

  • 部署Iterator 接口:
const obj = {  [Symbol.iterator] : function () {  //Symbol需要使用中括号括起来    return {      next: function () {        return {          value: 1,          done: true        };      }    };  }};
  • 默认原始具有Iterator 接口的数据结构:Array、Map、Set、String、TypedArray、函数的 arguments 对象、NodeList 对象
  • 对于类似数组的对象(存在数值键名和length属性),部署 Iterator 接口,有一个简便方法,就是Symbol.iterator方法直接引用数组的 Iterator 接口。
NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];// 或者NodeList.prototype[Symbol.iterator] = [][Symbol.iterator];[...document.querySelectorAll('div')] // 可以执行了

二、For...of(循环遍历具有Symbol.iterator属性的数据结构:Array、Map、Set、String、TypedArray、函数的 arguments 对象、NodeList 对象及部署了Symbol.iterator属性的数据结构)

for...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。

let arr = [3, 5, 7];arr.foo = 'hello';for (let i in arr) {  console.log(i); // "0", "1", "2", "foo"}for (let i of arr) {  console.log(i); //  "3", "5", "7"}

For...of可以与breakcontinuereturn配合使用

for (var n of fibonacci) {  if (n > 1000)    break;  console.log(n);}

 

转载于:https://www.cnblogs.com/sghy/p/7827129.html

你可能感兴趣的文章
利用表格实现大图轮播
查看>>
SpringBoot集成jsp
查看>>
30分钟学会如何使用Apache Shiro
查看>>
asp.net部署时加密config文件
查看>>
想开个网店的。。学习一下vancl的分析
查看>>
DDD:在基于关系数据库的领域,聚合的边界等于并发管理的边界。
查看>>
poj 1961 Period
查看>>
BZOJ1560: [JSOI2009]火星藏宝图
查看>>
play framework 相关
查看>>
cf1008 codeforces round #535(div3) E1. Array and Segments (Easy version)
查看>>
React 学习笔记
查看>>
LeetCode_Combinations
查看>>
快手第一题
查看>>
有向图强连通分量的Tarjan算法及模板
查看>>
MEAN教程3-NPM安装
查看>>
leetcode| Count Numbers with Unique Digits
查看>>
flask 模版语言及信息传递
查看>>
Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
查看>>
c++ throw异常(学习)
查看>>
IDEA中Git的使用
查看>>