六、函数
介绍:ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。通常情况下,定义了默认值的参数,应该是函数的尾参数,函数的length属性,将返回没有指定默认值的参数个数。
function log(x, y = 'World') {
console.log(x, y);
}
参数默认值可以与解构赋值的默认值,结合起来使用。
例:
function foo(fx, y = 5)){
console.log(x, v);
ES6引入rest参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象了。
例:
function add(...values) {}
add(2,5,3)
箭头函数:
介绍:Javascript中,经常使用回调函数,箭头函数的出现大大简化了回调函数的写法,当然,除了作为函数参数,箭头函数也可以出现在其他地方。
如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。
注意:箭头函数里面没有自己的this,而是引用外层的this。
例如:
var f = v => v;
等价于:
var f = function(v) {
return v;
};
箭头函数例子:
普通函数this指向它的调用者,箭头函数内部this指向声明时外部作用域的this。
let sayName = () => {
console.log(this);
}
// sayName();
let obj = {
name: '张三',
age: 12,
sayName () {
// this => obj
return sayName
}
// sayName () {
// console.log(this.name);
// }
// sayName () {
// // this => obj
// return () => {
// console.log(this);
// }
// }
}
// 普通函数内部this指向它的调用者
// 箭头函数内部this指向声明时,外部作用域的this
obj.sayName()();
七、迭代器
介绍:遍历器(lterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署lterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)
lterator的作用有三个:
一是为各种数据结构,提供一个统一的、简便的访问接口;
二是使得数据结构的成员能够按某种次序排列;
三是ES6创造了一种新的遍历命令for...of循环,lterator接口主要供for...of消费。
lterator的遍历过程:
1.创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
2.第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
3.第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
4.不断调用指针对象的next方法,直到它指向数据结构的结束位置。
迭代器实现:
lterator接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for..of循环。当使用for...of循环遍历某种数据结构时,该循环会自动去寻找lterator接口。一种数据结构只要部署了lterator接口,我们就称这种数据结构是“可遍历的”( iterable)。可以通过如下方法访问lterator对象:
var iterator = iterObj[Symbol.iterator]();
原生具备lterator接口的数据结构如下:
Array、Map、Set、String、TypedArray(不常用)、arguments、NodeList等
八、Set集合
介绍:Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构展。Set构造函数可以接受一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化。
var set = new Set();
Set API:
Set.prototype.size:返回Set实例的成员总数。
set.prototype.add(value):添加某个值,返回Set结构本身。
Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
Set.prototype.clear():清除所有成员,没有返回值。
Set.prototype.keys():返回键名的遍历器。
set.prototype.values():返回键值的遍历器。
Set.prototype.entries():返回键值对的遍历器。
Set.prototype.forEach():使用回调函数遍历每个成员。
九、Map集合
介绍:Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。Map可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
var map = new Map([ ['name', "张三'], [ 'title' , 'Author'] ]);
Set API:
Set.prototype.size:返回Map 结构的成员总数。
Set.prototype.set(key, value) :set方法设置键名key对应的键值为value,然后返回整个map结构。如果key已经有值,则键值会被更新,否则就新生成该键。
Set.prototype.get(key):get方法读取key对应的键值,如果找不到key,返回undefined。
Set.prototype.has(key):has方法返回一个布尔值,表示某个键是否在当前Map对象之中。
Set.prototype.delete(key):delete方法删除某个键,返回true。如果删除失败,返回false。
Set.prototype.clear():清除所有成员,没有返回值。
Set.prototype.keys():返回键名的遍历器。
set.prototype.values():返回键值的遍历器。
Set.prototype.entries():返回键值对的遍历器。
Set.prototype.forEach():使用回调函数遍历每个成员。