在for of循环出现之前,for循环适合遍历普通的数组,for in循环比较适合遍历键值对,遍历数组对象的foreach方法,但是这些遍历

都有一定的局限性,所以在ES6之后引入了统一的遍历方式 for of循环 举例下图所示:

但是此时如果遍历对象的话 会报错 obj is iterable 对象不可迭代 这是什么原因呢,如下图所示:

js中能够表示有结构的数据类型越来越多,为了给各种各样的数据结构提供统一遍历方式,官方提供了一个Iterable的接口 可迭代的

(符合相同的规格标准),实现Iterable 接口就是 for of的前提,也就是说原型链中必须要挂载一个Iterable方法,如下图原型所示:

那这个方法到底是干什么的呢,从下图上不难看出 Iterable底层维护了一个next方法的对象 value值为遍历的下一个元素done属性表示

是否遍历完

在上文中提到 之所以能够使用for of循环遍历 是因为Iterable的接口(符合相同的规格标准),也就是说如果对象符合了这个规格标准,

也可以使用for of循环,我们可以尝试着挂载一个Symbol.iterator方法 然后在方法中返回一个迭代器对象

我们来梳理下这几个对象之间的关系 以及它们的作用
1.最外层的obj对象 实现了可迭代接口 英文名 Iterable
作用:返回一个迭代器的Symbol.iterator方法,
2.Symbol.iterator方法 return的这个对象 实现了迭代器接口 英文名 Iterator
作用:内部必须要有一个内部迭代的next方法,
3.next方法中 return返回的对象 实现了迭代结果接口 英文名 IterationResult
作用:value属性 done的布尔值 表示迭代的值和迭代是否结束

最新文章

  1. .net 分布式架构之任务调度平台
  2. Newtonsoft.Json设置类的属性不序列化
  3. Windows Azure - Troubleshooting & Debugging: Role Recycling
  4. Moving From Top To Bottom in Detailed Block in Oracle Forms
  5. 采用TL026等构成的宽带ALC放大器电路图
  6. 设置让ASP.NET管道接收所有类型的请求
  7. 魔改——MFC SDI程序 转换为 MDI程序
  8. Tuple的用法
  9. Freemarker的初次使用之FTL标签嵌套与map的使用
  10. ios添加方法快捷方式
  11. Linux 根文件系统制作
  12. Linq编程101例
  13. 3D 灯光介绍
  14. 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .
  15. UVa1585 Score
  16. 解决ZF2_PATH environment
  17. PHP SOCKET 编程
  18. JS - Function 之 Arguments
  19. nginx负载均衡简单配置
  20. #7 Python代码调试

热门文章

  1. PyQt(Python+Qt)学习随笔:布局控件layout的layoutSizeConstraint属性
  2. zookeeper未授权访问渗透测试及修复方法
  3. Typora入门教程
  4. Pytorch训练时显存分配过程探究
  5. 深入理解Java虚拟机(一)——JVM内存模型
  6. 微信小程序-卡券开发(前端)
  7. MBR分区表为什么最大只能识别2TB硬盘容量
  8. emlog仿小刀网模板附文章
  9. mac下git连接github远程仓库
  10. 【MySQL】Novicat 连接mysql 报错1251的问题处理,Novicat12 破解方法