可迭代协议允许 JavaScript 对象去定义或定制它们的迭代行为, 例如(定义)在一个 for..of结构中什么值可以被循环(得到)。

一些内置类型都是内置的可迭代类型并且有默认的迭代行为( 比如 String、Array、Map、Set), 另一些类型则不是 (比如Object) 。

为了变成可迭代对象, 一个对象必须实现 @@iterator 方法, 意思是这个对象(或者它原型链 prototype chain 上的某个对象)必须有一个名字是 Symbol.iterator 的属性。

let fridge = { name: "卡萨帝冰箱", color: "白色", brand: "海尔" };
fridge[Symbol.iterator] = function*() {
yield this.name;
yield this.color;
yield this.brand;
}; for(let attr of fridge){
console.log(attr);
} let desc = [...fridge];
console.log(desc);

一些内置类型(String、Array、Map、Set)拥有默认的迭代器行为,其他类型(如 Object)则没有。

ECMAScript 2015 可迭代协议:迭代普通对象的更多相关文章

  1. python - 迭代器(迭代协议/可迭代对象)

    迭代器 # 迭代器协议 # 迭代协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就触发一个 StopIteration 异常,以终止迭代(只能往后走不能往前退) # 可迭代对 ...

  2. ECMAScript 2015 迭代器协议:实现自定义迭代器

    迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值,并且当所有的值都已经被迭代后,就会有一个默认的返回值. 当一个对象只有满足下述条件才会被认为是一个迭代器:它实现了一个 next() 的方法 ...

  3. JS - 迭代协议

    Iteration protocols | MDN 可迭代协议(iterable protocol) 迭代器协议(iterator protocol)

  4. for循环迭代可迭代对象

    模仿for循环迭代可迭代对象,# for i in Iterable:# iterable >>> 迭代器.iterator# 可迭代对象 iterable# 迭代器.iterato ...

  5. 如何阅读《ECMAScript 2015 Language Specification》

    你不需要把<ECMAScript 2015 Language Specification>通读一遍,因为没那个必要.   阮一峰建议: 对于一般用户来说,除了第4章,其他章节都涉及某一方面 ...

  6. ECMAScript和JavaScript的区别,ECMAScript发展更新历史,ECMAScript5和ECMAScript6的新特性及浏览器支持情况,ECMAScript 5/ECMAScript 2015正式发布

    ECMAScript和JavaScript的区别 ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会.欧洲计算机制造商协会是 ...

  7. 关于 ECMAScript、JavaScript、ES6、ECMAScript 2015

    ECMAScript 是一种规范,而 JavaScript 是对规范的实现.ECMA 是标准化组织. 最早的 JavaScript 是由 Netscape 公司开发的,并提交给 ECMA 标准化组织, ...

  8. python迭代-可迭代对象与迭代器对象

    可迭代对象与迭代器对象 问题举例 某软件要求,从网络抓取各个城市的气温信息,并依次显示: 北京:15~22 上海:18~23 ...... 如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会 ...

  9. 迭代 可迭代对象 迭代器的bj

    1.迭代的概念 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭代的初始值. 2.可迭代对象 ...

随机推荐

  1. 在WebStorm中使用editorConfig插件

    在webStorm中默认是支持editorConfig插件的,那么我们需要在webStorm中自定义editorConfig的配置怎么来做? 第一步:打开webStrome > File > ...

  2. [Bzoj2004][Hnoi2010]Bus 公交线路(状压dp&&矩阵加速)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2004 看了很多大佬的博客才理解了这道题,菜到安详QAQ 在不考虑优化的情况下,先推$dp ...

  3. 从零开始学编程_第A001期_C语言HelloWorld详解

    emmm,这是我的第一篇博客. 作为一个软件工程专业的学生,我希望自己能在编程方面有不错的成就,我们老师告诉我们学编程就要写博客,在写博客的过程中不断成长,结交朋友,所以我就开始尝试写专业相关的博客. ...

  4. Good number(3进制)

    https://codeforces.com/problemset/problem/1249/C2 C2. Good Numbers (hard version) time limit per tes ...

  5. 最长回文子序列/最长回文子串(DP,马拉车)

    字符子串和字符子序列的区别 字符字串指的是字符串中连续的n个字符:如palindrome中,pa,alind,drome等都属于它的字串 而字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符: ...

  6. spring-security问题记录

    一.错误信息 Could not decode JSON for additional information: BaseClientDetails 2019-12-03 22:18:37.239 W ...

  7. Python在windows下编译成exe文件

    1. pip install pyinstaller 2. 在Terminal下输入:“pyinstaller -F -w  *.py” 就可以生成exe.生成的文件放在同目录dist下. -F(注意 ...

  8. static作用,静态成员变量和静态成员函数

    static关键字有俩作用:(1).控制存储分配:(2).控制一个名字的可见性和连接.   随着C++名字空间的引入,我们有了更好的,更灵活的方法来控制一个大项目的名字增长.     在类的内部使用s ...

  9. CF1009F Dominant Indices 长链剖分

    题目传送门 https://codeforces.com/contest/1009/problem/F 题解 长链剖分的板子吧. 令 \(dp[x][i]\) 表示 \(x\) 的子树中的深度为 \( ...

  10. k8s 1.9.0-手动安装-2

    1 下载etcd新版 https://github.com/coreos/etcd/releases 直接下载k8s的二进制包 https://github.com/kubernetes/kubern ...