前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Iterator 和 for...of 循环

Iterator 和 for...of 循环

原创
作者头像
李才哥
修改2021-02-24 17:55:17
3380
修改2021-02-24 17:55:17
举报
文章被收录于专栏:李才哥李才哥

Iterator 和 for...of 循环

Iterator(遍历器)的概念

一种统一的接口机制,来处理所有不同的数据结构

为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作

一是为各种数据结构,提供一个统一的、简便的访问接口;

二是使得数据结构的成员能够按某种次序排列;

三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费

默认 Iterator 接口

Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环

一种数据结构只要部署了 Iterator 接口,我们就称这种数据结构是“可遍历的”

调用 Iterator 接口的场合

有一些场合会默认调用 Iterator 接口(即Symbol.iterator方法),除了下文会介绍的for...of循环,还有几个别的场合

对数组和 Set 结构进行解构赋值时,会默认调用Symbol.iterator方法。

扩展运算符(...)也会调用默认的 Iterator 接口。

yield*后面跟的是一个可遍历的结构,它会调用该结构的遍历器接口

for...of

Array.from()

Map(), Set(), WeakMap(), WeakSet()(比如new Map([['a',1],['b',2]]))

Promise.all()

Promise.race()

字符串的 Iterator 接口

字符串是一个类似数组的对象,也原生具有 Iterator 接口。

Iterator 接口与 Generator 函数

Symbol.iterator方法的最简单实现,还是使用下一章要介绍的 Generator 函数

遍历器对象的 return(),throw()

遍历器对象除了具有next方法,还可以具有return方法和throw方法

return方法的使用场合是,如果for...of循环提前退出

throw方法主要是配合 Generator 函数使用,一般的遍历器对象用不到这个方法

for...of 循环

一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员

for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Iterator(遍历器)的概念
    • 一种统一的接口机制,来处理所有不同的数据结构
      • 为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 Iterator 接口,就可以完成遍历操作
        • 一是为各种数据结构,提供一个统一的、简便的访问接口;
          • 二是使得数据结构的成员能够按某种次序排列;
            • 三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费
            • 默认 Iterator 接口
              • Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环
                • 一种数据结构只要部署了 Iterator 接口,我们就称这种数据结构是“可遍历的”
                • 调用 Iterator 接口的场合
                  • 有一些场合会默认调用 Iterator 接口(即Symbol.iterator方法),除了下文会介绍的for...of循环,还有几个别的场合
                    • 对数组和 Set 结构进行解构赋值时,会默认调用Symbol.iterator方法。
                      • 扩展运算符(...)也会调用默认的 Iterator 接口。
                        • yield*后面跟的是一个可遍历的结构,它会调用该结构的遍历器接口
                          • for...of
                            • Array.from()
                              • Map(), Set(), WeakMap(), WeakSet()(比如new Map([['a',1],['b',2]]))
                                • Promise.all()
                                  • Promise.race()
                                  • 字符串的 Iterator 接口
                                    • 字符串是一个类似数组的对象,也原生具有 Iterator 接口。
                                    • Iterator 接口与 Generator 函数
                                      • Symbol.iterator方法的最简单实现,还是使用下一章要介绍的 Generator 函数
                                      • 遍历器对象的 return(),throw()
                                        • 遍历器对象除了具有next方法,还可以具有return方法和throw方法
                                          • return方法的使用场合是,如果for...of循环提前退出
                                            • throw方法主要是配合 Generator 函数使用,一般的遍历器对象用不到这个方法
                                            • for...of 循环
                                              • 一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员
                                                • for...of循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如arguments对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串
                                                领券
                                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档