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(已 ...
随机推荐
- android 保存Bitmap 到本地 哦
public String saveImage(Bitmap bmp) { File appDir = new File(Environment.getExternalStorageDirectory ...
- window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...
- Scala编程--函数式对象
本章的重点在于定义函数式对象,也就是说,没有任何可变状态的对象的类.作为运行的例子,我们将创造若干把分数作为不可变对象建模的类的变体.在这过程中,我们会展示给你Scala面向对象编程的更多方面:类参数 ...
- linux -a 到 -z 的意义
shell if判断中常用的也就是绿色部分,尾部部分越看越不懂.从百度文库转载. [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则 ...
- laravel in centos
如果遇到: phpunit.... To enable extensions, verify that they are enabled in those .ini files: - /etc/php ...
- 关于selenium2(webdriver)自动化测试过程中标签页面或者窗口切换的处理解决方案
1. 通过页面或者window 的name切换: switch_to_frame(name) switch_to_window(name) 那么问题来了,出现2个或者以上窗口时候,新打开的windo ...
- IntelliJ IDEA手工安python装插件方法
IntelliJ IDEA手工安装插件方法 以IntelliJ IDEA 11.0.1安装python为例: (1)下载python插件地址:http://plugins.intellij.net/p ...
- Android Studio安装插件GsonFormat
Android Studio菜单栏File > Settings > plugins' 这个是Android Studio搜索和安装插件的界面,下面直接上动图 : 安装结束后需要关闭重新启 ...
- linux命令:tar
1.命令介绍: tar用来打包,压缩和解压文件. 2.命令格式: tar [选项] 文件 3.命令参数: 必要参数有如下: -A 新增压缩文件到已存在的压缩 -B 设置区块大小 -c 建立新的压缩文件 ...
- Maven构件解析(转)
文章转自http://gavinwind2000.iteye.com/blog/2290652 谢谢博主的总结! 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在 ...