一 迭代器和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选项来启动相关属性。

deep-in-es6(一)的更多相关文章

  1. ES-6常用语法和Vue初识

    一.ES6常用语法 1.变量的定义 1. 介绍 ES6以前 var关键字用来声明变量,无论声明在何处都存在变量提升这个事情,会提前创建变量. 作用域也只有全局作用域以及函数作用域,所以变量会提升在函数 ...

  2. 用简单的方法学习ES6

    ES6 简要概览 这里是ES6 简要概览.本文大量参考了ES6特性代码仓库,请允许我感谢其作者@Luke Hoban的卓越贡献,也感谢@Axel Rauschmayer所作的[优秀书籍]//explo ...

  3. 超实用的 JavaScript 代码片段( ES6+ 编写)

    Array 数组 Array concatenation (数组拼接) 使用 Array.concat() ,通过在 args 中附加任何数组 和/或 值来拼接一个数组. const ArrayCon ...

  4. 基于 es6 的 javascript 实用方法

    一.求数字数组的平均数 - 使用 数组的 reduce() 方法将每个值添加到累加器,初始值为0,总和除以数组长度. const average = arr => arr.reduce((acc ...

  5. es6注意点

    补救方法: 详情:http://es6.ruanyifeng.com/#docs/array 取出文本内容 实现深拷贝 jq实现不完全深拷贝 jQuery.extend = jQuery.fn.ext ...

  6. es6 + 笔记整理

    1. ES6提供了默认参数值机制,允许你为参数设置默认值,防止在函数被调用时没有传入这些参数: const required = () => {throw new Error('Missing ...

  7. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  8. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  9. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  10. ES6(块级作用域)

    我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...

随机推荐

  1. 使用python抓取App数据

    App接口爬取数据过程使用抓包工具手机使用代理,app所有请求通过抓包工具获得接口,分析接口反编译apk获取key突破反爬限制需要的工具:夜神模拟器FiddlerPycharm实现过程首先下载夜神模拟 ...

  2. 我所理解的monad(1):半群(semigroup)与幺半群(monoid)

    google到数学里定义的群(group): G为非空集合,如果在G上定义的二元运算 *,满足 (1)封闭性(Closure):对于任意a,b∈G,有a*b∈G (2)结合律(Associativit ...

  3. [NOIP2016普及组]魔法阵

    题目:洛谷P2119.Vijos P2012.codevs5624. 题目大意:有n件物品,每件物品有个魔法值.要求组成魔法阵(Xa,Xb,Xc,Xd),该魔法阵要满足Xa<Xb<Xc&l ...

  4. word/excel/ppt 2 PDF

    PHP 实现 word/excel/ppt 转换为 PDF 一般最常见的就是利用OpenOffice来转换,来看看实现的核心代码: class PDFConverter { private $com; ...

  5. [JLOI2015]装备购买(线性基)

    [JLOI2015]装备购买 题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 nn 件装备,每件装备有 \(m\) 个属性,用向量 \(\mathbf{z_i}\)=\((a_1, \ldots ...

  6. 浅析[分块]qwq

    首先说明这篇博客写得奇差无比 让我们理清一下为什么要打分块,在大部分情况下,线段树啊,splay,treap,主席树什么的都要比分块的效率高得多,但是在出问题的时候如果你和这些数据结构只是混的脸熟的话 ...

  7. MySql中允许远程连接

    要达到这个目的需要实现两点 开通用户权限 解除本地绑定 开通用户权限 首先登陆服务器端的mysql //不使用空格可以直接登陆 mysql -u用户名 -p密码 mysql> use mysql ...

  8. Mesh BRep Shapes

    Mesh BRep Shapes eryar@163.com Abstract. 当对OpenCASCADE的BRep表示法的数据结构有了一定的理解后,建议可以自己实现一个显示数据生成的功能,即网格剖 ...

  9. POJ - 3415 Common Substrings(后缀数组求长度不小于 k 的公共子串的个数+单调栈优化)

    Description A substring of a string T is defined as: T( i, k)= TiTi+1... Ti+k-1, 1≤ i≤ i+k-1≤| T|. G ...

  10. centos7 ssh免口令认证登录

    摘要:centos7, xshell, 公钥,  ssh ssh登录方式有口令认证登录和密钥认证登录 接下来本次介绍是ssh密钥登录方式 (1)产生公钥 (2)将公钥放置到centos7的(/root ...