ES6学习——集合(Collections):WeakMap

来源:互联网 发布:php多维数组去除重复 编辑:程序博客网 时间:2024/06/06 19:43

WeakMap的概念在Java中一样存在,和Map的主要区别在于垃圾收集的处理不同。这个数据结构在规范的23.3章节中进行了描述。

WeakMap只有key是可GC的,并不是value,这里的概念可能和Java里的不同。


这里主要说一下和Map区别:

1)WeakMap的key必须是object,如果不是就会抛出异常

var wm = new WeakMap()wm.set(1,2)//Uncaught TypeError: Invalid value used as weak map key(…)wm.set({},1)

2)WeakMap没有clear方法


3)WeakMap没有size属性

因为它里面的记录可能被GC,无法进行统计。


4)WeakMap不是可iterable,所以和iterable一系列相关的方法都没有,例如values(),keys()等


看个简单的例子:

var m = new WeakMap();var x = { id: 1 },y = { id: 2 };m.set( x, y );x = null; // x可以GC了y = null; // y还是不可以GC


*以上全部代码在Chrome 47下通过测试

0 0