es6再回顾 info深入理解es6
迭代器和for-of循环
es5使用内建的forEach方法来遍历数组
arr.foreach(function(value){
console.log(value);
});
这段代码看起来简洁,但这种方法有一个小缺陷:你不能使用break语句中断循环,也不能使用return语句返回到外层函数。
es6 for-of 可以正确响应break、continue和return语句
for (var value of myArray) {
console.log(value);
}
for-of可以用来干什么
for-in循环用来遍历对象属性。
for-of循环用来遍历数据—例如数组中的值。
for-of循环也支持字符串遍历,它将字符串视为一系列的Unicode字符来进行遍历:
它同样支持Map和Set对象遍历。
for (var [key, value] of phoneBookMap) {
console.log(key + "'s phone number is: " + value);
}
var map=new Map([['a',1],['b',2]]);
for (var [key, value] of map) {
console.log(key + "'s phone number is: " + value);
}
VM1833:2 a's phone number is: 1
VM1833:2 b's phone number is: 2
Map:Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
//1.
var map = new Map();
map.set('one', 1);
map.set('two', 2);
map.set('three', 3);
//...
//2. var map = new Map([['one',1], ['two', 2], ['three', 3]]);
ES6生成器(Generators)
我们称之为生成器函数,它与普通函数有很多共同点,但是二者有如下区别:
- 普通函数使用function声明,而生成器函数使用function*声明。
模板字符串
反撇号(`)基础知识
ES6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 " 外,它们看起来与普通字符串并无二致。在最简单的情况下,它们与普通字符串的表现一致:
context.fillText(`Ceci n'est pas une chaîne.`, x, y);
五.不定参数和默认参数
es6数据类型
- Undefined 未定义
- Null 空值
- Boolean 布尔类型
- Number 数字类型
- String 字符串类型
- Object 对象类型
ES6引入了一种新的原始数据类型Symbol,表示独一无二的值
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
上面代码中,变量i是var声明的,在全局范围内都有效。所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮的i的值。而使用let则不会出现这个问题。
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
箭袋中的新羽
ES6中引入了一种编写函数的新语法
// ES5
var selected = allJobs.filter(function (job) {
return job.isSelected();
});
// ES6
var selected = allJobs.filter(job => job.isSelected());
当你只需要一个只有一个参数的简单函数时,可以使用新标准中的箭头函数,它的语法非常简单:标识符=>表达式
。你无需输入function
和return
,一些小括号、大括号以及分号也可以省略。
如果要写一个接受多重参数(也可能没有参数,或者是不定参数、默认参数、参数解构)的函数,你需要用小括号包裹参数list。
// ES5
var total = values.reduce(function (a, b) {
return a + b;
}, 0);
// ES6
var total = values.reduce((a, b) => a + b, 0);
关于Map:http://www.cnblogs.com/sker/p/5520392.html
http://www.cnblogs.com/dagaoxiaozheng/p/6605981.html