ES6 map weakmap set weakset 区别
前端数据结构 https://www.cnblogs.com/baoshuyan66/p/10307595.html
https://es6.ruanyifeng.com/#docs/set-map
我们常用的对象Object,是由key:value集合组成的,但key只能是字符串,有很大的使用限制。当我们需要其他类型的数据做key值时,就需要用到数据结构Map,它支持把各种类型的值,当做键。
var map = new Map();
var nie = {name:'Annie'};
var kth = {name:'Keith'};
map.set(nie,kth);
map.set(kth,nie);
console.log(map.get(nie)); //{name:'Keith'}
console.log(map.get(kth)); //{name:'Annie'}
还有其他方法:
map.size //2,表示map中的成员数量
map.has(nie) //true,布尔值,判断成员是否存在
map.delete(nie) //true,布尔值,删除成员,删除成功返回true,失败返回false
map.clear() //清除所有成员,没有返回值
区别:
-
WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
-
WeakMap的键名所指向的对象,不计入垃圾回收机制。
-
WeakMap只接受对象作为key,如果设置其他类型的数据作为key,会报错。
-
WeakMap的key所引用的对象都是弱引用,只要对象的其他引用被删除,垃圾回收机制就会释放该对象占用的内存,从而避免内存泄漏。
-
由于WeakMap的成员随时可能被垃圾回收机制回收,成员的数量不稳定,所以没有size属性。
-
没有clear()方法
-
不能遍历