ES6(12)—— 数据结构WeakMap

WeakMap和Map结构类似,也用于生成键值对的集合。WeakMap可以使用set方法添加成员,也可以接受一个数组,作为构造函数的参数。

一、WeakMap与Map的区别。

1、WeakMap只接受对象作为键名(null除外),不接受其他类型的键值作为键名。

2、WeakMap的键名所指向的对象不计入垃圾回收机制。

WeakMap设计的目的在于,有时我们想在某个对象上面存放一些数据,但是这些数据会形成对这个对象的引用。

conts e1 = document.getElementById('foo');
const e2 = document.getElementById('bar');
const arr = [
    [e1,'foo 元素'],
    [e2,'bar 元素'],
];

//arr对变量e1和e2进行了引用,如果不用,必须手动删除这个引用,否则垃圾回收机制不会释放e1和e2占用的内存。容易造成内存泄漏,手动删除方式如下:

arr[0] = null;
arr[1] = null;

如果要向对象中天啊家数据元素又不想干扰垃圾回收机制,便可以使用WeakMap。典型的应用,在网页的DOM元素上添加数据时就可以使用WeakMap结构。当该DOM元素被清除,其所对应的WeakMap记录就会自动被移除。

注意:WeakMap弱引用的只是键名而不是键值。简直依然时正常引用。

二、WeakMap的语法。

WeakMap与Map在API上的区别有两个。一是没有遍历操作(即没有key()、values()和entries()方法),也米有size属性。二是无法清空,既不支持clear方法。因此,WeakMap只有四个方法get()、set()、has()、delete()。

猜你喜欢

转载自blog.csdn.net/zhanghuali0210/article/details/81280740