2017.12.06 ES6笔记

数据结构 Map(字典)
是用来存储不重复key的Hash结构。不同于集合(Set)的是,字典使用的是[键,值]的形式来储存数据的。
JavaScript的对象(Object:{})只能用字符串当作键。这给它的使用带来了很大的限制。
为了解决这个问题,ES6提供了Map数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串-值”的对应,Map结构提供了“值-值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。

var data1={a:1},data2={b:2},obj={};
obj[data1]=1;
obj[data2]=2;
console.log(obj);  //[object object]:2
console.log(data1.toString());  //[object object]
console.log(data1.toString() === data2.toString());  //true

1.如何创建一个Map (二维数组) link
2.Map 类的属性: size
3.Map 类的方法:
(1)set(key,value)设置键名key对应的键值为value,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。
(2)get(key)get方法读取key对应的键值,如果找不到key,返回undefined。
(3)delete(key)方法返回一个布尔值,表示某个键是否在当前Map对象之中。
(4)has(key)方法返回一个布尔值,表示某个键是否在当前Map对象之中。
(5)clear()清除所有数据,没有返回值。
(6)keys()返回键名的遍历器
(7)values()返回键值的遍历器
(8)entries()返回键值对的遍历器
(9)forEach()使用回调函数遍历每个成员
Map 在使用过程中的一些注意事项:

map.set(NaN,10).set(NaN,100);
console.log(map);   //NaN=>100

map.set({},'x').set({},'y');
console.log(map);  //Object=>'x',Object=>'y'

console.log({}==={});  //false
引用数据类型比较,实际上是它的内存地址,而不是它们的值

map里面的key的排列顺序是按照添加顺序进行排列的。

Iterator(迭代器) 和 for...of循环
基本概念:在ES6中新增了Set和Map两种数据结构,再加上JS之前原有的数组和对象,这样就有了四种数据集合,平时还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象等。这样就需要一种统一的接口机制,来处理所有不同的数据结构。
Iterator就是这样的一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作,而且这种遍历操作是依次处理该数据结构的所有成员。
Iterator遍历器的作用
1.为各种数据结构,提供一个统一的、简便的访问接口。
2.使得数据结构的成员能够按某种次序排列。
3.ES6新增了遍历命令for...of循环,Iterator接口主要供for...of消费。
Iterator的遍历过程link
1.创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
2.第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
3.第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
4.不断调用指针对象的next方法,直到它指向数据结构的结束位置。
每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
凡是具有Symbol.iterator属性的数据结构都具有Iterator接口 link
具备Iterator接口的数据结构都可以进行如下操作:
1、

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里只属于前端工程师。