时间:2021-05-28
WeakMap对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
iterable
Iterable 是一个数组(二元数组)或者其他可迭代的且其元素是键值对的对象。每个键值对会被加到新的WeakMap 里。null 会被当做 undefined。
WeakMap 的 key 只能是Object类型。原始数据类型 是不能作为 key 的(比如 Symbol)。
在 JavaScript 里,map API 可以通过使其四个 API 方法共用两个数组(一个存放键,一个存放值)来实现。给这种map 设置值时会同时将键和值添加到这两个数组的末尾。从而使得键和值的索引在两个数组中相对应。当从该 map 取值的时候,需要遍历所有的键,然后使用索引从存储值的数组中检索出相应的值。
但这样的实现会有两个很大的缺点,首先赋值和搜索操作都是 O(n) 的时间复杂度( n 是键值对的个数),因为这两个操作都需要遍历全部整个数组来进行匹配。另外一个缺点是可能会导致内存泄漏,因为数组会一直引用着每个键和值。这种引用使得垃圾回收算法不能回收处理他们,即使没有其他任何引用存在了。
相比之下,原生的 WeakMap 持有的是每个键对象的“弱引用”,这意味着在没有其他引用存在时垃圾回收能正确进行。原生 WeakMap 的结构是特殊且有效的,其用于映射的 key 只有在其没有被回收时才是有效的。
正由于这样的弱引用,WeakMap 的 key是不可枚举的 (没有方法能给出所有的 key)。如果key 是可枚举的话,其列表将会受垃圾回收机制的影响,从而得到不确定的结果。因此,如果你想要这种类型对象的key 值的列表,你应该使用 Map。
基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。
length 属性的值为0。
WeakMap 构造器的原型。允许添加属性到所有的 WeakMap 对象。
所有WeakMap实例继承自WeakMap.prototype.
WeakMap.prototype.constructor
返回创建WeakMap实例的原型函数。 WeakMap函数是默认的。
移除key的关联对象。执行后 WeakMap.prototype.has(key)返回false。
返回key关联对象, 或者 undefined(没有key关联对象时)。
根据是否有key关联对象返回一个Boolean值。
在WeakMap中设置一组key关联对象,返回这个 WeakMap对象。
Specification Status Comment ECMAScript 2015 (6th Edition, ECMA-262)
WeakMap Standard Initial definition. ECMAScript (ECMA-262)
WeakMap Living Standard
以上就是JavaScript WeakMap使用详解的详细内容,更多关于JavaScript WeakMap的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言我们先从WeakMap的特性说起,然后聊聊WeakMap的一些应用场景。特性1.WeakMap只接受对象作为键名constmap=newWeakMap();
第一页:JavaScript数据类型详解第二页:JavaScript数据类型详解第三页:JavaScript数据类型详解 数据类型 JavaScript中有
COM组件中调用JavaScript函数详解及实例要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc()
Javascript实现计算器:系列文章:JS实现计算器详解及实例代码(一)Javascript实现计算器时间功能详解及实例(二)小型JavaScript计算器
Javascript计算器:系列文章:JS实现计算器详解及实例代码(一)Javascript实现计算器时间功能详解及实例(二)Javascript计算器->添加