`for..of` 循环如何从对象解析迭代器?

2023-12-12

对于实现可迭代接口的对象,它必须实现[Symbol.iterator]指向一个函数的键,该函数返回iterator。我想知道是否for..of循环在对象内部调用此方法来获取iterator?

我很好奇的原因是,例如,Map定义了一个带有多个迭代器(条目、值、键)的接口,并且似乎如果没有明确指定for..of循环使用返回的迭代器map.entries() call.

我尝试着寻找在规范中但它仅指定iterator作为参数传递给抽象操作ForOf:

使用参数调用抽象操作 ForIn/OfBodyEvaluation lhs,stmt,iterator、iterationKind、lhsKind 和 labelSet。

所以基本上有两个问题:

  1. 迭代器是如何从对象中获取的?
  2. 规范中哪里规定的?

指定操作的具体位置在7.4.1 GetIterator( 对象 [ , 方法 ] )。这样就得到了@@iterator步骤 1a 中传递的对象的属性。抽象操作的:

a. Set method to 获取方法(obj,@@迭代器)。

@@iterator is a 众所周知的符号那就是Symbol.iterator对象上的属性。

由于产生式,这被 for-in 和 for-of 循​​环使用13.7.5.11 运行时语义:

迭代语句 : for(对于声明 of 赋值表达式) 陈述

  1. Let 关键结果是执行的结果ForIn/OfHead 评估(绑定名称为对于声明, 赋值表达式,迭代)。
  2. Return 国外/身体评估(对于声明, 陈述, 关键结果, 迭代, lexicalBinding,labelSet).

在这里,您可以看到传递给的迭代器参数国外/身体评估是返回值关键结果 of ForIn/OfHead 评估。步骤 7b 中的返回值为:

b.返回获取迭代器(表达式值).

因此,for-of 循​​环通过访问@@iterator or Symbol.iterator按规范众所周知的符号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`for..of` 循环如何从对象解析迭代器? 的相关文章

  • 如何使用 JavaScript 创建链接?

    我有一个标题字符串和一个链接字符串 我不知道如何将两者放在一起以使用 JavaScript 在页面上创建链接 任何帮助表示赞赏 我试图解决这个问题的原因是因为我有一个 RSS 源并且有一个标题和 URL 列表 我想将标题链接到 URL 以使
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 带有淘汰赛js的隐形recaptcha

    我正在完成隐形验证码 但我在实现它时遇到问题 谷歌开发人员页面中的代码显示它应该是这样的
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 使用 CSS 或 Javascript 填充动画

    我只是想知道是否可以使用 CSS 或 javascript 创建填充动画 基本上我想创建一个填充动画 如下图所示 http i40 tinypic com eit6ia png http i40 tinypic com eit6ia png
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 如何更改 Linux 中打开文件的数量限制? [关闭]

    Closed 这个问题是无关 目前不接受答案 运行我的应用程序时 有时会出现以下错误too many files open Running ulimit a报告限制为 1024 如何将限制提高到 1024 以上 Edit ulimit n
  • 在 jQuery 中用跨度包围一些文本

    我拥有的 ul li My text ul class myClass li blahblahblah li ul li ul 我想要的是 ul li span My text span ul class myClass li blahbl
  • 为什么 _bin_DeployableAssemblies 文件夹特定于 Web 应用程序?

    VS 2010 SP1 中添加了 bin DeployableAssemblies 文件夹 作为拉入不存在硬依赖项的程序集的常用方法 我相信它最初是作为允许人们进行 bin 部署 MVC 的一种方式而添加的 但它在 Web 应用程序之外的环
  • 如何在php中搜索精确的数字

    如何搜索准确的号码 这段代码是这样工作的 如果我搜索 24626838 这是完全否 它什么也没有显示 之后如果我搜索这个 no 2462683 这不完整 所以它显示的结果是这样的 像这样 24626838 24626838 24626836
  • 可以在不删除和插入的情况下更新红黑树中的节点键吗?

    通常 对红黑树中的键进行更改需要通过删除然后重新插入节点来执行 是否有可能对红黑树中的节点进行key更新比delete insert更高效 通过 需要时搜索 删除 插入来实现更新 1 删除密钥O log n 2 使用新键插入新节点O log
  • 在 ASP.NET 中使用 Unity.WebForms

    我正在尝试在 webforms 项目中实现 DI 因此我在 UI 层中安装了 Unity WebForms dll 一旦我这样做 就会使用 UnityWebFormsStart 类文件为我创建一个 App Start 文件夹 该文件内有一个
  • 帮助我理解 AVAssetWriter 中的 CMTime

    我很难理解如何使用 AVAssetWriter 将 30fps 的运动 JPEG 流转换为视频文件 我没有得到的部分是 适配器appendPixelBuffer buffer withPresentationTimeresentTime 方
  • Python - 我看不到我的错误是什么,因为窗口立即消失

    我对 Python 还很陌生 我对这个问题非常恼火 我不确定这是否重要 但我使用 Python 2 7 6 运行我的 py 文件 并在我的计算机上安装了 python 而不是在任何在线事物或其他程序上使用它 每次我遇到错误时 我的程序都会正
  • sql触发器来停止跨行重复

    我有一个包含多条记录的表 用户名 例如 TOM Question ID 例如 q002 答案 例如 D 我想创建一个触发器 以便没有人可以两次提交同一问题的答案 它必须是一个触发器 only CREATE TRIGGER trigger C
  • 使用 html2canvas 的 div 的屏幕截图。发送到 php,保存:图像损坏

    我生成画布并将其传递给 php 如下所示 body on click save image function html2canvas myImage onrendered function canvas imageHolder html c
  • Apache Flink 中的 Keyby 数据分布,逻辑运算符还是物理运算符?

    根据 Apache Flink 文档 KeyBy 转换在逻辑上将流划分为不相交的分区 所有具有相同键的记录都被分配到同一个分区 KeyBy是100 逻辑转换吗 它不包括跨集群节点分布的物理数据分区吗 如果是这样 那么如何保证所有具有相同键的
  • 如何为 SpaServices 托管的多个 SPA 配置 ASP.net Core 服务器路由

    我有一个 Angular 5 应用程序 我想使用最新的 ASP net Core 上的 Angular Universal 来托管该应用程序角模板 RC 我已按照文档操作并启动并运行了应用程序 问题是我也在使用 Angular 的国际化工具
  • 如何在 AngularJS 中使用 ng-repeat 迭代键和值?

    在我的控制器中 我有如下数据 scope object data 现在这个数据是字典 其中的键和值来自json 我可以通过以下方式访问该属性object name在模板中 有没有什么方法可以让我迭代这些键并将它们显示在表格中 例如 tr t
  • 如何使用同步页面 POST 从 HTML 表单发送复杂的 JSON 对象?

    我的服务器正在使用 ServiceStack 并且希望接收如下数据 Customer Company TheCompany RegionCode AU NSW Name First Jimi Last Hendrix 我有一个包含这些字段的
  • 如何使用 Spring Kafka 检查 Kafka 是否为空?

    当我重新启动应用程序时 我需要处理 Kafka 中的剩余消息 直到它为空 然后我的应用程序应该继续正常工作 我的问题是如何检查 Kafka 主题是否为空 我正在使用 Spring Kafka Set the idleEventInterva
  • 在 Angular JS 中渲染 404 页面而不重定向

    我正在将 ui router 和 ngResource 与 AngularJS 一起使用 我的问题是 如何渲染 404 而不重定向到它 例如用户键入http www example com 错误页面名称 他应该只看到 404 页面 并且 U
  • 正确使用 sizeof 和 Byte[]

    我有点不知所措 但我有以下代码 真正的代码当然有道理 NSData dataTheseBytes Byte bytes return NSData dataWithBytes bytes length sizeof bytes 编译器警告是
  • 如何从 cin 获取超过 1 个单词的输入 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我目前正在尝试学习 C 并且正在开发我的第一个项目 它应该提出问题并让用户提供答案的输入 然后将输入写入具有某种格式的文件中 但是 我在描述行输入中不断收到错误 它只接受句子中的第一个单词
  • Android 列表视图 setOnItemClickListener 不起作用

    我想最初在列表视图中隐藏编辑文本和按钮字段 并在单击该原始数据时显示列表视图中特定原始数据的编辑文本和按钮 因此 我尝试在布局 xml 中将高度设置为 0 然后设置它当用户单击原始值时 它会变为其他值 但它不起作用我认为我的列表视图单击事件
  • `for..of` 循环如何从对象解析迭代器?

    对于实现可迭代接口的对象 它必须实现 Symbol iterator 指向一个函数的键 该函数返回iterator 我想知道是否for of循环在对象内部调用此方法来获取iterator 我很好奇的原因是 例如 Map定义了一个带有多个迭代