ES6入门教程之Iterator与for...of循环详解

发布时间 - 2026-01-11 01:08:47    点击率:

本文主要介绍了关于ES6中Iterator与for...of循环的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看详细的介绍:

一、Iterator(遍历器)

遍历器(Iterator)是一种协议,任何对象只要部署了这个协议,就可以完成遍历操作。在ES6中遍历操作特质for….of循环。

它的作用主要有两个:

  • 为遍历对象的属性提供统一的接口。
  • 使对象的属性能够按次序排列。

ES6的遍历器协议规定,部署了next方法的对象,就具备了遍历器功能。next方法必须返回一个包含value和done两个属性的对象。value属性是当前遍历的位置的值,而done属性是一个布尔值,用来表示遍历是否结束。

 function makeIterator(array) {
  var nextIndex = 0;

  return {
   next: function() {
    return nextIndex < array.length ?
     {value: array[nextIndex++], done: false} :
     {value: undefined, done: true};
   }
  }
 }

 var it = makeIterator(['a', 'b']);
 it.next().value; //'a'
 it.next().value; //'b'
 it.next().done; // true

在上面代码片段中,定义了一个makeIterator函数,它的作用是返回一个遍历器对象,用来遍历参数数组。特别需要注意的是next返回值的构造。

下面,再看看一个遍历器的示例代码片段:

 function idMaker() {
  var index = 0;
   return {
   next: function() {
    return {value: index++, done: false};
   }
   }
 }

 var it = idMaker();
 it.next().value; //'0'
 it.next().value; //'1'
 it.next().value; //'2'

二、for…of 循环

在ES6中,一个对象只要部署了next方法,就被视为是具有了iterator接口,就可以用for…of循环遍历它的值。

 function idMaker() {
  var index = 0;
  return {
   next: function() {
    return {value: index++, done: false};
   }
  }
 }

 for (var n of it) {
  if (n > 5) {
   break;
   console.log( n );
  }
 }
 //0
 //1
 //2
 //3
 //4
 //5

上面的代码说明,for….of默认从0开始循环。

数组原生具备iterator接口

 const arr = [1, 5, 3, 9];
 for (let v of arr) {
  console.log( v );
 }
 //1
 //5
 //3
 //9

相比较,Js原有的for…in循环,只能获得对象的键名,不能直接获取键值。ES6提供了for…of循环,允许遍历获取键值。

 var arr = ['a', 'b', 'c', 'd'];

 for (a in arr) {
  console.log( a );
 }
 //0
 //1
 //2
 //3

 for (a of arr) {
  console.log( a );
 }
 //0
 //1
 //2
 //3

上面的代码片段表明,for…in循环读取键名,而for…of循环读取键值。

对于Set和Map结构的数据,可以直接使用for…of循环。

 var name = ['S', 'D', 'J', 'Z', 'G', 'G', 'G'];
 for ( var e of name) {
  console.log( e );
 }
 //S
 //D
 //J
 //Z
 //G


 var es6 = new Map();
 es6.set('edition', 6);
 es6.set('committee', 'TC39');
 es6.set('standard', 'ECMA-262');
 for(var [name, value] of es6) {
   console.log(name + ": " + value);
 }
 // edition: 6
 // commttee: TC39
 // standard: ECMA-262

在上面的代码片段中,演示了如何遍历Set结构和Map结构,后者是同是遍历键名和键值。

对于普通的对象,for...of结构不能直接使用,否则则会报错。必须项部署iterator接口才能使用。但是,在这种情况下,for...in循环依然可以遍历键名。

 var es6 = {
  name: "G.Dragon",
  year: 22,
  love: "coding"
 };

 for (e in es6) {
  console.log( e );
 }
 //name
 //year
 //love

 for( e of es6) {
  console.log( e );
 }
 // TypeError: es6 is not iterable

最后,总结一下。for...of循环可以使用的范围包括数组、类似数组的而对象(比如argument对象、DOM NodeList对象)、Set和Map结构、后文的Generator对象,以及字符串。下面是使用for...of循环遍历字符串和DOM NodeList对象的例子。

 // 字符串例子
 let str = "hello";

 for (let s of str) {
  console.log( s );
 }
 //h
 //e
 //l
 //l
 //o

 // DOM NodeList对象的例子
 let paras = document.getSelectorAll("p");
 for (let p of paras) {
  p.classList.add("test");
 }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# es6  # for  # of  # 遍历对象  # iterator  # ES6 迭代器与可迭代对象的实现  # es6 for循环中let和var区别详解  # ES6教程之for循环和Map  # Set用法分析  # ES6新特性二:Iterator(遍历器)和for-of循环详解  # ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)  # 详解CommonJS和ES6模块循环加载处理的区别  # ES6 Iterator接口和for...of循环用法分析  # ES6的循环与可迭代对象示例详解  # 遍历  # 键值  # 键名  # 在上面  # 的是  # 是一个  # 是一种  # 相关内容  # 可以用  # 朋友们  # 可以直接  # 可以使用  # 这篇文章  # 报错  # 谢谢大家  # 在这种情况下  # 则会  # 再看看  # 需要注意  # 相比较 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  大连 网站制作,大连天途有线官网?  如何用虚拟主机快速搭建网站?详细步骤解析  phpredis提高消息队列的实时性方法(推荐)  Mybatis 中的insertOrUpdate操作  Linux系统命令中screen命令详解  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  HTML 中动态设置元素 name 属性的正确语法详解  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  iOS正则表达式验证手机号、邮箱、身份证号等  JS中对数组元素进行增删改移的方法总结  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Python并发异常传播_错误处理解析【教程】  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  浅谈Javascript中的Label语句  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  如何在腾讯云免费申请建站?  如何快速查询域名建站关键信息?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  历史网站制作软件,华为如何找回被删除的网站?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  如何获取免费开源的自助建站系统源码?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何基于云服务器快速搭建个人网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  详解jQuery停止动画——stop()方法的使用  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在云主机快速搭建网站站点?  Laravel storage目录权限问题_Laravel文件写入权限设置  大型企业网站制作流程,做网站需要注册公司吗?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何用PHP快速搭建CMS系统?  如何破解联通资金短缺导致的基站建设难题?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何在服务器上三步完成建站并提升流量?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  JavaScript中的标签模板是什么_它如何扩展字符串功能