ES6笔记一
遍历数组:
1:传统的
for (var index = 0; index < myArray.length; index++) {
console.log(myArray[index]);
}
2 内建的 forEach 方法
myArray.forEach(function (value) {
console.log(value); //value不是下标而是数组内容
});
但是此方法不能使用 break 语句中断循环,也不能使用 return 语句返回到外层函数。
3:for-in 循环
for (var index in myArray) { // 千万别这样做
console.log(myArray[index]);
}
在这段代码中,赋给 index 的值不是实际的数字,而是字符串“0”、“1”、“2”,
此时很可能在无意之间进行字符串算数计算,例如:“2” + 1 == “21”,这给
编码过程带来极大的不便。
在某些情况下,这段代码可能按照随机顺序遍历数组元素。
简而言之,for-in 是为普通对象设计的,你可以遍历得到字符串类型的键,
因此不适用于数组遍历。
for-in适用于普通对象和哈希(hash)数组
hash数组的创建只有一种方法
var foo = [];
foo['name'] = 'tom';
foo['sex'] = 'man'; 4:ES6 中增加了一种新的for-of循环语法 for (var value of myArray) {
console.log(value);//value不是下标而是数组内容
}
这个方法避开了 for-in 循环的所有缺陷
与 forEach()不同的是,它可以正确响应 break、continue 和 return 语句 for-of 循环不仅支持数组,还支持大多数类数组对象,例如 DOM NodeList 对象。
for-of 循环也支持字符串遍历,它将字符串视为一系列的 Unicode 字符来进行遍历:
for (var chr of "qwqew") {
alert(chr);//分别输出:q w q e w
}
它同样支持 Map 和 Set 对象遍历。 Set 对象可以自动排除重复项:
// 基于单词数组创建一个 set 对象
var uniqueWords = new Set(words);
生成 Set 对象后,你可以轻松遍历它所包含的内容:
for (var word of uniqueWords) {
console.log(word);
}
Map 对象稍有不同:内含的数据由键值对组成,所以你需要使用解构(destructuring)
来将键值对拆解为两个独立的变量: for (var [key, value] of phoneBookMap) {
console.log(key + "'s phone number is: " + value);
} for-of 循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用 for-in 循
环(这也是它的本职工作)或内建的 Object.keys()方法:
// 向控制台输出对象的可枚举属性
for (var key of Object.keys(someObject)) {
console.log(key + ": " + someObject[key]);
} 当你向任意对象添加 myObject[Symbol.iterator]()迭代器方法,就可以遍历这个对象
假设你正在使用 jQuery,尽管你非常钟情于里面的.each()方法,但你还
是想让 jQuery 对象也支持 for-of 循环,你可以这样做:
jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
这里通过 Symbol 处理了一下方法的名称。标准委员会可以把这个方法命
名为.iterator()方法,但是如果你的代码中的对象可能也有一些.iterator()方法,这一定会
让你感到非常困惑。于是在 ES6 标准中使用 symbol 来作为方法名,而不是使用字符串
Symbols 是 ES6 中的新类型,基于新标准,你可以定义一个全新的 symbol,就像 Symbol.iterator,如此
一来可以保证不与任何已有代码产生冲突。
所有拥有[Symbol.iterator]()的对象被称为可迭代的
ES6笔记一的更多相关文章
- ES6笔记(5)-- Generator生成器函数
系列文章 -- ES6笔记系列 接触过Ajax请求的会遇到过异步调用的问题,为了保证调用顺序的正确性,一般我们会在回调函数中调用,也有用到一些新的解决方案如Promise相关的技术. 在异步编程中,还 ...
- ES6笔记系列
ES6,即ECMAScript 6.0,ES6的第一个版本是在2015年发布的,所以又称作ECMAScript 2015 如今距ES6发布已经一年多的时间,这时候才去学,作为一个JSer,羞愧羞愧,还 ...
- ES6笔记(1) -- 环境配置支持
系列文章 -- ES6笔记系列 虽然ES6已经发布一年多了,但在各大浏览器之中的支持度还不是很理想,在这查看ES6新特性支持度 Chrome的最新版本浏览器大部分已经支持,在Node.js环境上支持度 ...
- ES6笔记(2)-- let的块级作用域
系列文章 -- ES6笔记系列 一.函数级作用域 我们都知道,在ES6以前,JS只有函数级作用域,没有块级作用域这个概念 没有块级作用域,有利有弊,利于方便自由,弊于作用域内的变量容易被共享,例如这个 ...
- ES6笔记(3)-- 解构赋值
系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { ret ...
- ES6笔记(4)-- Symbol类型
系列文章 -- ES6笔记系列 Symbol是什么?中文意思是标志.记号,顾名思义,它可以用了做记号. 是的,它是一种标记的方法,被ES6引入作为一种新的数据类型,表示独一无二的值. 由此,JS的数据 ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- ES6笔记(7)-- Promise异步编程
系列文章 -- ES6笔记系列 很久很久以前,在做Node.js聊天室,使用MongoDB数据服务的时候就遇到了多重回调嵌套导致代码混乱的问题. JS异步编程有利有弊,Promise的出现,改善了这一 ...
- ES6 笔记汇总
ES6 笔记汇总 二.ES6基础-let和const命令 三.变量的解构赋值 四.字符串的拓展 五.正则表达式的拓展 ...将会持续更新,敬请期待
- ES6笔记2
ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...
随机推荐
- WordPress程序伪静态规则(Nginx/Apache)及二级目录规则
在众多CMS程序中,我们使用WORDPRESS还是比较多的,不仅仅是安全度较好,二来在于插件和主题很多,即便对于不会建站技术的用户也很简单的就可以搭建属于自己的网站项目.对于网站我们肯定是需要让有用户 ...
- Linux学习 :移植U-boot_2016.09到JZ2440开发板
一.下载源码:ftp://ftp.denx.de/pub/u-boot/ 二.初始化编译: ①新建一个单板: cd board/samsung/ cp smdk2410 smdk2440 -rf ...
- Service Broker应用(2):不同server间的数据传输,包含集群
不同Server之间的数据传输,包含DB使用AlwaysOn 配置脚本: SQL Server Service Broker 跨集群通信 具体的TSQL 脚本语句如下.注意的是TSQL语句是在发送方还 ...
- UART接口基本知识
Universal asynchronous transciever即同一异步收发器,也就是我们平时所说的串口,是一种最简单,最基本的通信接口. 通信接口按照不同的标准有不同的分类,常见的有同步或异步 ...
- echo, print, print_r
echo 不是函数,没有返回值,因此只是用作输出的话会更快 print 和 print_r 有返回值,区别在于: print 用于打印一个字符串,print_r 可以打印一些复合类型,如: $arr= ...
- Question Of Rabbit
题目描述 f(n) = GCD(1, n) + GCD(2, n) + GCD(3, n) + ~ ~ ~ + GCD(n - 1, n). 输入 每行一个整数N (1 < N < 400 ...
- OpenCV阶段总结扩充。
Mat类型简单介绍 /* cv::Mat类是用于保存图像以及其他矩阵的数据结构.默认情况下,其尺寸为0,我们也可以设置其初始尺寸,比如定义一个Mat类的对象,就要写cv::Mat pic(320,64 ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- codeforces 722C (并查集)
题目链接:http://codeforces.com/contest/722/problem/C 题意:每次破坏一个数,求每次操作后的最大连续子串和. 思路:并查集逆向操作 #include<b ...
- 使用Spring 发送 Email !!!!
邮件服务器: 邮件服务器提供了邮件系统的基本结构,包括邮件传输,邮件分发,邮件存储等功能,以确保邮件能够发送到互联网中的任意地方. 邮件服务器就像我们生活中的邮局,为人们提供邮件服务.要保证邮件被正确 ...