ES6新特性二:Iterator(遍历器)和for-of循环详解
发布时间 - 2026-01-11 00:45:08 点击率:次本文实例讲述了ES6新特性之Iterator(遍历器)和for-of循环。分享给大家供大家参考,具体如下:

1. 遍历数组
for-of工作原理:迭代器有一个next方法,for循环会不断调用这个iterator.next方法来获取下一个值,直到返回值中的 done属性为true的时候结束循环。
① 在ES6之前
var arr = [1,2,3,4,5,6];
arr.name = 'a';
for (var index = 0; index < arr.length; index++) {
console.log(arr[index]);
}
arr.forEach(function (value) { //ES5 内建的forEach方法 缺陷:无法使用break 中断 ,也不能使用return 语句返回到外层函数
console.log(value);
});
结果都是:1,2,3,4,5,6
② 用 for-in :作用于数组的 forfor -in 循环体除了遍历数组元素外,还会遍历自定义属性。比如数组有一个可枚举属性arr.a,循环将额外执行一次
for (var index in arr) { // 千万别这样做
console.log(arr[index]);
}
结果:1,2,3,4,5,6,a
for-in 是为普通对象设计的,赋值给index的值不是实际的数字1、2,而是字符串‘1',‘2'
var b = 0;
for (var index in arr) {
b = b+ index;
console.log(b)
}
结果:00,001,0012,00123,001234,0012345,0012345name
③ 使用 for-of:避开了for-in 的所有缺陷,可以正确响应 break、return 语句
for(var value of arr){
console.log(value)
}
结果:1,2,3,4,5,6
2.for-of 循环便利其他集合
① 遍历Set
var words = 'a';
var s = new Set();
s.add("a");
s.add(1);
for(var word of s){
console.log(word);
}
结果:a,1
② 遍历Map
var map = new Map();
map.set('a',1);
map.set('b',2);
map.set('c',3);
map.set('d',4);
for(var [key,value] of map){
console.log(key+':'+value);
}
结果:a:1,b:2,c:3,d:4
3. Iterator(遍历器)
① 遍历器(Iterator)是一种接口规格,任何对象只要部署这个接口,就可以完成遍历操作。它的作用有两个,一是为各种数据结构,提供一个统一的、简便的接口,二是使得对象的属性能够按某种次序排列。
② 遍历器的原理:遍历器提供了一个指针,指向当前对象的某个属性,使用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']);
console.log(it.next());//{ value: 'a', done: false }
console.log(it.next());//{ value: 'b', done: false }
console.log(it.next());//{ value: undefined, done: true }
③ Iterator接口返回的遍历器,原生具备next方法。
> 有三类数据结构原生具备Iterator接口:数组、类似数组的对象、Set和Map结构。
var map = new Map(); console.log(map[Symbol.iterator] === map.entries)//true var arr = new Array(); console.log(arr[Symbol.iterator] === arr.values)//true var set = new Set(); console.log(set[Symbol.iterator] === set.values)//true
> 其他数据结构(主要是对象)如果需要Iterator接口,都需要自己部署。
var students = {}
students[Symbol.iterator] = function() {
let index = 1;
return {
next() {
return {done: index>10, value: index++}
}
}
}
for(var i of students) {
console.log(i);
}//
希望本文所述对大家ECMAScript程序设计有所帮助。
# ES6
# 新特性
# Iterator(遍历器)
# for-of循环
# ES6中非常实用的新特性介绍
# JavaScript ES6的新特性使用新方法定义Class
# JavaScript中的Reflect对象详解(ES6新特性)
# 深入浅出ES6新特性之函数默认参数和箭头函数
# 简单谈谈ES6的六个小特性
# ES6新特性之Symbol类型用法分析
# ES6(ECMAScript 6)新特性之模板字符串用法分析
# ES6新特性之变量和字符串用法示例
# ES6新特性之模块Module用法详解
# ES6新特性之字符串的扩展实例分析
# ES6新特性六:promise对象实例详解
# ES6新特性七:数组的扩充详解
# ES6新特性八:async函数用法实例详解
# ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
# 让微信小程序支持ES6中Promise特性的方法详解
# ES6新特性:使用export和import实现模块化详解
# es6新特性之 class 基本用法解析
# ES6 13个新特性总结
# 遍历
# 数据结构
# 就可以
# 有一个
# 都是
# 是一个
# 也不
# 是一种
# 一是
# 还会
# 开了
# 这样做
# 给大家
# 自定义
# 千万别
# 提供一个
# 内建
# 方法来
# 所述
# 三类
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel如何实现多对多模型关联?(Eloquent教程)
如何确保西部建站助手FTP传输的安全性?
linux写shell需要注意的问题(必看)
制作公司内部网站有哪些,内网如何建网站?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Python文件流缓冲机制_IO性能解析【教程】
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何使用Sanctum进行API认证?(SPA实战)
企业网站制作这些问题要关注
Laravel如何发送系统通知?(Notification渠道示例)
详解vue.js组件化开发实践
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
如何实现javascript表单验证_正则表达式有哪些实用技巧
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
浅谈redis在项目中的应用
Laravel如何创建自定义Artisan命令?(代码示例)
如何在万网自助建站平台快速创建网站?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
如何快速选择适合个人网站的云服务器配置?
Android滚轮选择时间控件使用详解
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
黑客如何通过漏洞一步步攻陷网站服务器?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
python中快速进行多个字符替换的方法小结
高防服务器租用指南:配置选择与快速部署攻略
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Bootstrap CSS布局之列表
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
高防服务器租用首荐平台,企业级优惠套餐快速部署
Laravel安装步骤详细教程_Laravel环境搭建指南
如何快速搭建高效香港服务器网站?
深圳网站制作的公司有哪些,dido官方网站?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Linux系统命令中screen命令详解
微信小程序 input输入框控件详解及实例(多种示例)
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
上一篇:《文旅通》注册账号方法
上一篇:《文旅通》注册账号方法

