理解 ECMAScript 2017(ES8)中的 for...of 循环及其优势

在 ES6 中,新增了 for...of 循环语句,该循环语句是 ES5 中的 for...in 循环语句的一个替代品,但是 for...of 循环语句的优势更加明显。本文将会深入阐述 for...of 循环语句的执行过程和其优势,并提供示例代码加以说明。

for...of 循环语句的执行过程

for...of 语句是用来循环遍历数组、集合、Map、Set 和字符串等可迭代对象(iterable)的循环语句。以下是 for...of 循环语句的语法:

--- --------- -- --------- -
  -- ---- ----- -- -- --------
-

其中,“变量”代表循环中每次迭代的值,“可迭代对象”是您希望循环遍历的数据结构。

for...of 循环语句的执行过程是从可迭代对象中依次取出每个元素,将其赋值给循环中的变量,然后执行循环体内的代码块。代码块内的执行会持续到所有元素都被遍历完毕为止。

for...of 循环语句的优势

相较于 for...in 循环语句,for...of 循环语句有很多的优势:

1. 可迭代对象的值是元素本身

for...in 循环语句中,迭代变量是迭代对象的键名,而不是键值。因此,如果您希望访问对象的值,必须使用该键名来访问。

----- --- - - -- -- -- -- -- - --

--- ------ --- -- ---- -
  ----------------- -- - - -
  ---------------------- -- - - -
-

使用 for...of 循环语句之后,您可以直接访问元素而不需要通过键名来访问。

----- --- - --- -- ---

--- ------ ---- -- ---- -
  ------------------ -- - - -
-

2. 可以避免循环体内的无用迭代

for...in 循环语句中,您不能直接控制循环次数,因为它会遍历对象的所有属性,甚至包括它的原型链。如果该对象包含诸如 constructortoString() 等方法,您就需要在循环体内使用额外的逻辑来排除它们。

for...of 循环语句中,您不需要担心这个问题,因为它只会遍历集合的元素,而不会遍历它的属性。

----- --- - ------- -------

-- --- ------- ----- -------- ----
--- ------ ----- -- ---- -
  ------------------- -- - -
  ------------------------ -- --- ---
-

-- ---- ------- ----- -------- ----
--- ------ ---- -- ---- -
  ------------------ -- --- ---
-

3. 可以遍历任何可迭代对象

for...of 循环语句不仅是遍历数组的理想选择,而且可以用来遍历任何实现了可迭代协议的对象。

可迭代对象是指实现了 Iterable 接口的对象。Iterable 接口定义了一个 Symbol.iterator 方法,通过该方法返回一个 Iterator,然后可以使用该 Iterator 进行循环。

以下是 for...of 循环语句遍历 Map 和 Set 示例代码:

-- ----- -------- -- ---- ------- - ---
----- ----- - --- -----
  ----- -------
  ----- -------
---
--- ------ ----- ------ -- ------ -
  ------------------- - ----------- -- - - ---  - - ---
-

-- ----- -------- -- ---- ------- - ---
----- ----- - --- ----------- --------

--- ------ ---- -- ------ -
  ------------------ -- --- ---
-

示例代码:使用 for...of 循环语句进行迭代

以下是关于如何使用 for...of 循环语句遍历数组的示例代码。

----- --- - --- -- ---

-- ----- -------- -- ------- ---- -- -----
--- ------ ---- -- ---- -
  ------------------ -- - - -
-

以下是使用 for...of 循环语句遍历字符串的示例代码:

----- --- - --------
--- ------ ---- -- ---- -
  ------------------ -- - - - - -
-

以下是使用 for...of 循环语句遍历 Map 和 Set 的示例代码:

-- ----- -------- -- ------- ---- - ---
----- ----- - --- -----
  ----- -------
  ----- -------
---
--- ------ ----- ------ -- ------ -
  ------------------- - ----------- -- - - ---  - - ---
-

-- ----- -------- -- ------- ---- - ---
----- ----- - --- ----------- --------

--- ------ ---- -- ------ -
  ------------------ -- --- ---
-

总结

for...of 循环语句是 ES6 中新增的语法,是对 for...in 循环语句的改进和替代,提供了更好的遍历集合和迭代器的方法,同时易于理解和编写。在未来的开发工作中,您可以优先考虑将 for...of 循环语句用于遍历数组、集合等可迭代对象。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/651e547995b1f8cacd5fca89


猜你喜欢

  • 如何使用 LESS 编写响应式布局

    在现代 Web 设计中,越来越多的网站需要采用响应式布局来适应不同尺寸的设备。虽然 CSS 已经可以实现响应式布局,但它的语法和结构却不太适合复杂的样式规则。LESS 是一个 CSS 预处理器,它可以...

    1 年前
  • 解决 ECMAScript 2017 中 Array.prototype [@@iterator]() 方法出现的兼容性问题

    在 ECMAScript 2017 中,JavaScript 新增了 Array.prototype@@iterator 方法,该方法返回一个新的 Array Iterator 对象,该对象可以迭代数...

    1 年前
  • 性能优化技巧:如何利用异步 IO 提高性能

    (本文涉及的代码均基于 JavaScript) 随着互联网和 Web 技术的发展,前端开发的工作内容越来越复杂,前端开发人员需要掌握众多的技术和工具来提高项目的性能。

    1 年前
  • 如何在 Tailwind CSS 实现精美页面的图片悬浮效果?

    Tailwind CSS 是一款流行的 CSS 框架,它的优点是可以通过简单的类名来快速构建出复杂的页面,同时也提供了丰富的样式组件和工具类,使得开发者可以快速构建出精美的页面。

    1 年前
  • 非常详细的 CSS Grid 布局及应用实例教程

    近年来,CSS Grid 布局在前端开发领域中越来越受欢迎。它是一个强大的工具,可以帮助我们实现复杂的布局,而且与其他布局方式相比,它具有更高的灵活性和可自定义性。

    1 年前
  • RxJS 的 last 操作符使用及常见问题解决方法

    在 RxJS 中,last 操作符用于发出一个值,这个值是一个 Observable 对象的最后一个值。 本文将探讨 RxJS 中 last 操作符的使用和常见问题,包括示例代码。

    1 年前
  • MongoDB 常见的查询优化技巧及实践

    1. 简介 MongoDB 是一种 NoSQL 数据库,它使用文档模型来存储数据。相比传统的关系型数据库,MongoDB 具有更高的可扩展性和灵活性。但是,随着数据量的增加,查询性能可能会受到影响。

    1 年前
  • Jest 测试 React 组件时,遇到 “Cannot read property 'props' of undefined” 怎么办?

    在前端开发中,Jest 是一个非常流行的测试框架,它可以帮助我们编写和运行各种类型的测试。在测试 React 组件时,有时候我们会遇到 “Cannot read property 'props' of...

    1 年前
  • Server-sent Events(SSE) 与 WebSocket 技术的比较及使用场景

    随着 Web 应用程序越来越复杂,实时数据处理和推送需求也越来越普遍。在这种情况下,Server-sent Events (SSE) 和 WebSocket 技术成为了两个受欢迎的选择,它们都提供了一...

    1 年前
  • Hapi 框架中使用 good 插件记录日志

    在现代的 Web 应用程序中,日志记录是非常重要的。它可以帮助开发人员了解应用程序的运行情况,从而更好地调试和优化应用程序。Hapi 是一个流行的 Node.js Web 框架,它提供了一个名为 go...

    1 年前
  • 如何在 Serverless 应用中实现跨域访问?

    在 Serverless 应用中,由于前后端分离的架构,前端往往需要与后端进行跨域访问。本文将介绍如何在 Serverless 应用中实现跨域访问,并提供示例代码及指导意义。

    1 年前
  • 如何在 Angular 中使用 ngZone 优化性能

    什么是 ngZone ngZone 是 Angular 中的一个服务,它提供了一种机制来确保 Angular 应用程序中的更改能够正确地被检测到和更新。ngZone 的主要功能是管理 Angular ...

    1 年前
  • Redis 性能测试实战指南

    介绍 Redis 是一个开源的键值对存储系统,旨在提供快速、高效的数据存储和访问。为了确保 Redis 在实际场景中的性能表现,我们需要进行性能测试和优化。本文将介绍 Redis 的性能测试方法和实战...

    1 年前
  • 如何用 Babel 实现将 JavaScript 代码转换为 WebAssembly 代码

    WebAssembly 是一种新型的低级代码格式,它可以在浏览器中运行,提供了比 JavaScript 更高效的性能和更好的安全性。但是,WebAssembly 的语法比较复杂,学习成本比较高。

    1 年前
  • 在 Node.js 中快速创建 GraphQL API 的最佳实践

    GraphQL 是一种新型的 API 查询语言,它可以帮助前端开发人员更方便地获取数据,减少不必要的网络请求。本文将介绍如何在 Node.js 中快速创建 GraphQL API 的最佳实践,并提供详...

    1 年前
  • ECMAScript 2018 中的 Regular Expression Lookahead Assertions 详解

    在 ECMAScript 2018 中,引入了一种新的正则表达式语法:Lookahead Assertions(前瞻断言)。它可以让我们在匹配字符串时,向前查看一定的字符,以便更精确地匹配目标字符串。

    1 年前
  • 在 Chai.js 中使用 expect.js 允许写作时的链式扩展

    Chai.js 是一个流行的 JavaScript 测试框架,它提供了很多有用的断言库来验证代码是否按照预期工作。其中,expect.js 是一个基于 BDD 风格的断言库,能够使测试代码更加可读且易...

    1 年前
  • SASS 源码解析及性能优化技巧

    SASS(Syntactically Awesome Style Sheets)是一个强大且灵活的 CSS 预处理器,它可以让开发者更加方便地编写可维护的 CSS 代码。

    1 年前
  • ECMAScript 2017 中的 Symbol.species 属性详解及其在类继承中的应用

    简介 Symbol.species 是ECMAScript 2017标准中新增的一个属性。该属性是一个ES6原始数据类型,它允许开发者自定义派生对象的构造器函数。 Symbol.species属性主要...

    1 年前
  • 解决 React 中的重复呈现问题

    在 React 中,我们经常会遇到组件重复呈现的问题,这可能会导致性能问题和不必要的渲染。本文将介绍如何解决 React 中的重复呈现问题,以提高应用程序的性能和响应速度。

    1 年前

相关推荐

    暂无文章