WeakMap WeakSet
特性:
- WeakMap對key的引用和WeakSet的成員 是弱引用
- WeakMap對key的引用和WeakSet的成員 只能是對象
- 無法遍歷
優點:
- 不易造成內存泄漏
弱引用
引用了對象,但是不影響它的垃圾回收
不會因爲該(弱)引用而改變原本的垃圾回收機制,在(弱)引用前應該進垃圾場的,(弱)引用後還是得進垃圾場,不受到(弱)引用的任何影響。
var obj = {};
var wm = new WeakMap();
// 弱引用
wm.set(obj, 1);
console.log(wm.get(obj)); // 1
// obj爲null,將會給垃圾回收機制回收。
obj = null;
console.log(wm.get(obj)); // undefined
Set Map WeakSet WeakMap區別
Set
- 成員唯一、無序且不重複
- [value, value],鍵值與鍵名是一致的(或者說只有鍵值,沒有鍵名)
- 可以遍歷,方法有:add、delete、has
WeakSet
- 成員都是對象
- 成員都是弱引用,可以被垃圾回收機制回收,可以用來保存DOM節點,不容易造成內存泄漏
- 不能遍歷,方法有add、delete、has
Map
- 本質上是鍵值對的集合,類似集合
- 可以遍歷,方法很多可以跟各種數據格式轉換
WeakMap
- 只接受對象作爲鍵名(null除外),不接受其他類型的值作爲鍵名
- 鍵名是弱引用,鍵值可以是任意的,鍵名所指向的對象可以被垃圾回收,此時鍵名是無效的
- 不能遍歷,方法有get、set、has、delete