/*** ECMAScript6中的Map集合** Map类型是一种存储着许多键值对的有序列表, 其中键名和键值支持所有的数据类型* 键名的判断是通过调用 Object.is()方法实现的,所以 5 和 "5" 被判断为两个类型**/let map = new Map();map.set("name","song");document.write(map.get("name") + "<br/>"); // songdocument.write(map.get("age") + "<br/>"); // undefined/*** Map集合支持的方法** has(key) 检测指定的key是否存在Map集合中* delete(key) 从Map集合中移除指定的key键名和值* clear() 移除Map集合中所有的键值对** */document.write(map.has("name") + "<br/>"); // truedocument.write(map.size + "<br/>"); // 1// 清空键值对map.clear();document.write(map.size + "<br/>"); // 0map.set("age",1);document.write(map.size + "<br/>"); // 1// 删除指定键map.delete("age");document.write(map.size + "<br/>"); // 0map.set("name","zhangsan");map.set("age",20);// 遍历Mapmap.forEach(function(value, key, ownerMap){console.log(key + " >>> " + value)});map.forEach(function(value, key) {console.log(key + " >>> " + value)});// 遍历过程中会按照键插入Map集合的顺序处理/*** WeakMap 是弱引用Map集合,也是用于存储对象的弱引用。** WeakMap集合最大的用途是保存Web页面中的DOM元素,使用WeakMap来跟踪DOM元素,当DOM元素消失时,可以自动销毁集合中相关对象** weakMap集合只支持 has() 可以检测给定键值存在性 以及 delete()* 不支持 clear()*/let weakMap = new WeakMap();let element = document.querySelector(".content");console.log(element.innerHTML.length); // Hello WorldweakMap.set(element,"original");weakMap.get(element);console.log(weakMap.has(element)); // true;// Person是一个立即调用函数表达式var Person = (function(){let privateMap = new WeakMap();/*** Person的构造使用 WeakMap集合来存放私有数据, 键是this,值是对象包含的私有信息.* 只要实例对象被销毁,相关信息也会被销毁,从而保证了信息的私有性。* 如果你想使用非对象作为键名,那么普通Map集合时你唯一的选择*/function Person(name) {privateMap.set(this,{name:name});}Person.prototype.getName = function() {return privateMap.get(this).name;}return Person;}());let p = new Person("song");console.log(p.getName());