一 迭代器和for-of循环
以前的一些遍历数组:

function c(n) {
console.log(n);
}

方法一:

for(let i = 0;i < arr.length;i++) {
c(i);
}

方法二:ES5语法

arr.forEach(function(value,index) {
//c(value+" "+index);
if(value > 5) {
//break; //报错
//return value;
c(value+" "+index);
}
});

有个小缺陷,再次循环中不能使用break,return语句。

方法三:遍历对象的for-in循环

for(var index in arr) {
c(arr[index]+" "+index);
}

有很多缺点:

1.其中的index是字符串,不是数字,如果进行计算会产生很大的麻烦。
2.它不但遍历数组,还可以遍历数组的属性,如果数组中有枚举属性,则for-in循环会额外的执行一次。就连原型链上的属性也会访问。
3.for-in循环最大的缺点会按照随机顺序遍历数组。
4.for-in循环的设计是为了遍历对象,可以遍历字符串类型的值,但不适用于数组。
1.1 方法四:for-of循环

for(let value of arr) {
c(value);
}

解决了for-in遍历数组的一切缺点,也满足forEach()迭代的缺点,能使用break,return语句。

for-of遍历其他集合:它支持数组遍历,还支持大多数类数组对象。例如:DOM NodeList对象,字符串的遍历,Set,Map(es6新增的对象)。他们都有个共同点,他们都有一个迭代器的方法。不支持普通对象(普通对象的遍历for-in),或者可以使用内建的Object.keys();

for(var key of arr.keys()) {
c(key);//遍历的索引值
}

1.2 迭代器:

给人以类型的对象添加迭代器的方法。
给随便的一个类字符串添加toString();的方法即可转换成字符串,同样给任意的对象添加[Symbol.iterator]();方法就可以使用for-of来遍历该对象。
eg:给jQuery添加和数组一样的fot-of遍历的方法:、

jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];

Symbols是es6里面的新类型。拥有[Symbol.iterator]();的对象是可迭代的。

var zeroesForeverIterator = {
[Symbol.iterator] : function() {//命名而已,保证新的和已有的不冲突。
return this;
},
next : function() {
return {
done : false,
value : 0
}
}
};

以上是一个简单的迭代器,for-of循环首先调用集合的[Symbol.iterator]();方法,接着返回一个新的迭代器对象,迭代器对象可以是任意具有.next();方法的对象,for-of循环将重复调用这个方法,每次循环调用一次。

语法运行环境:
web重要使用这种语法,要使用Babel和Traceur这些预编译器将es6代码翻译成es5代码。
在服务器端:不需要任何的预编译器,io.js支持es6,node中需要启用--homoney选项来启动相关属性。

最新文章

  1. 【BZOJ1251】序列终结者 Splay
  2. android 设置textview跑马灯效果
  3. js实现页面跳转的几种方式
  4. [CareerCup] 2.6 Linked List Cycle 单链表中的环
  5. Java使用JSP Tag Files &amp; JSP EL Functions打造你自己的页面模板
  6. Java学习笔记之:java运算符
  7. POJ 3660 Cow Contest(传递闭包floyed算法)
  8. 【Struts】strust.xml中&lt;result type=&quot;&quot;&gt;所有类型详解
  9. Linux驱动开发相关
  10. 怎样在小方框上打对号 小方框内打对勾 word 方框打对勾
  11. 使用javaDate类代数据仓库维度表
  12. 原生JS+Canvas实现五子棋游戏
  13. c语言构造类型之数组_01
  14. UNIX网络编程——select函数的并发限制和 poll 函数应用举例
  15. 《深入理解Java虚拟机》-----第6章 类文件结构——Java高级开发必须懂的
  16. jenkins 持续集成iOS开发
  17. golang结构体
  18. Replication主要配置项
  19. Python20-Day03
  20. 利用Spring AOP和自定义注解实现日志功能

热门文章

  1. codeforces 540 B School Marks【贪心】
  2. TP5 安装
  3. es6 学习1 let表示变量 、const表示常量 与 var 变量的区别
  4. win2003系统同步Linux ntp server批处理
  5. 紫书 例题 10-16 UVa 12230(数学期望)
  6. C#调用C/C++动态库,封装各种复杂结构体
  7. 洛谷 P1824 进击的奶牛
  8. Linux 下UVC&amp;amp;V4L2技术简单介绍(二)
  9. Invalid command &amp;#39;WSGIScriptAlias&amp;#39;, perhaps misspelled or defined by a module not included in the ser
  10. webpack03