/**
* ECMAScript6中的Map集合
*
* Map类型是一种存储着许多键值对的有序列表, 其中键名和键值支持所有的数据类型
* 键名的判断是通过调用 Object.is()方法实现的,所以 5 和 "5" 被判断为两个类型
*
*/
let map = new Map();
map.set("name","song");
document.write(map.get("name") + "<br/>"); // song
document.write(map.get("age") + "<br/>"); // undefined
/**
* Map集合支持的方法
*
* has(key) 检测指定的key是否存在Map集合中
* delete(key) 从Map集合中移除指定的key键名和值
* clear() 移除Map集合中所有的键值对
*
* */
document.write(map.has("name") + "<br/>"); // true
document.write(map.size + "<br/>"); // 1
// 清空键值对
map.clear();
document.write(map.size + "<br/>"); // 0
map.set("age",1);
document.write(map.size + "<br/>"); // 1
// 删除指定键
map.delete("age");
document.write(map.size + "<br/>"); // 0
map.set("name","zhangsan");
map.set("age",20);
// 遍历Map
map.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 World
weakMap.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());