一、Map
1、概念:
一种键值对结构,但键的类型可以是各种类型的值,不限于字符串
是一对Object结构的扩展
2、初始化:
var map = new Map();
//得到类似这样的结构{"name" => "张啊", "title" => "ES6"}
var map2 = new Map([['name','张啊'],['title','ES6']]);
3、属性、方法:
- map.size:得到内部成员数量
- map.set(key,value):设置key对应的值
- map.get(key):获取key对应的值
- map.has(key):是否有这个key
- map.delete(key):删除
- map.clear():清空
4、遍历方法:
- map.keys():返回键名遍历器(Iterator),然后使用for...of遍历
- map.values():返回键值遍历器(Iterator),然后使用for...of遍历
- map.entries():返回所有成员组成的遍历器(Iterator),然后使用for...of遍历
- map.forEach(function(value,key,map){...}):直接遍历所有成员
5、注意:
1、如果一个键被多次赋值,后面的会覆盖前面的值
(当键是对象时,相同的概念,是指键在内存上的地址相同)
(如果Map的键是简单数据类型【数字、字符串、布尔值】时,只要两个值严格相等,那么就是同一个键)
2、如果读取一个未知的键,返回undefined
二、WeakMap
1、概念:
1、只接受对象作为键名的Map,
2、键名是对象的弱引用,所指向的对象不计入垃圾回收机制,当对象被回收后,WeakMap自动移除对应的键值对
2、应用的场合:
它的键所对应的对象可能会在将来消失
典型的场合就是Dom节点作为键名
3、初始化:
var wm = new WeakMap();
4、方法:
wm.set(key,value)
wm.get(key)
wm.has()
wm.delete()
注意:
1、不可遍历
2、没有size属性
3、不支持clear,不能清空