首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js WeakMap用法

ECMAScript 6 新增的“弱映射”(WeakMap)是一种新的集合类型,为这门语言带来了增强的键/值对存储机制。WeakMap 是 Map 的“兄弟”类型,其 API 也是 Map 的子集。...WeakMap 中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱映射”中键的方式。 基本API 1....创建 可以使用 new 关键字实例化一个空的 WeakMap: const wm = new WeakMap(); 注意:弱映射中的键只能是 Object 或者继承自 Object 的类型,尝试使用非对象设置键会抛出...: const str = new String("小明"); const wm = new WeakMap([ [str, 10] ]); 2. set() set(): 给WeakMap实例添加键...WeakMap 确实没有这个方法。因为不可能迭代,所以也不可能在不知道对象引用的情况下从弱映射中取得值。即便代码可以访问 WeakMap 实例,也没办法看到其中的内容。

2.7K21

Map与WeakMap

== NaN But key(NaN) === key(NaN)"} WeakMap 描述 WeakMap的key只能是Object类型,原始数据类型不能作为key。...WeakMap持有的是每个键对象的弱引用,这意味着在没有其他引用存在时垃圾回收能正确进行,WeakMap用于映射的key只有在其没有被回收时才是有效的,正由于弱引用,WeakMap的key是不可枚举的,...如果需要在对象上添加对象而又不想干扰垃圾回收机制的话,就可以使用WeakMap。 属性与方法 WeakMap.prototype.constructor: 返回构造函数。...WeakMap.prototype.set(key, value): 在WeakMap中设置一组key关联对象,返回这个 WeakMap对象。...内存回收实例 // WeakMap示例代码 var wm = new WeakMap(); var key = {}; wm.set(key, new Array(6 * 1024 * 1024));

51120
您找到你想要的搜索结果了吗?
是的
没有找到

终于在 JS 中用上 WeakMap 了!

也就是 Map 和 WeakMap 对象。例如: a thing....WeakMap 和 Map 的主要区别就是:WeakMap 的键名所引用的对象是弱引用。 弱引用:在计算机程序设计中,弱引用与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。...所以,现在这个场景我们使用 WeakMap 再合适不过了, WeakMap 使用的所有的 key 都会在合适的场景下被回收,我们就不用担心内存泄漏了~ 下面再来看看我们的代码: window.seCache...= window.seCache || WeakMap.new(); function getExpandedHeight() { // We already have the calculated...终于派上用场了~ 本文译自:https://macarthur.me/posts/when-a-weakmap-came-in-handy 抖音前端正急缺人才,如果你想加入我们,欢迎加我微信和我联系。

82120

JS中的WeakMap与WeakSet

介绍 WeakMap与WeakSet都是一种优化使用内存的解决方案。这两个数据结构的引用不会导致这些对象不被回收。上来就说这些有点太枯燥了,还是先聊聊它们能干什么。...set.add(1) // TypeError: Invalid value used in weak set WeakMap 上文提到的WeakSet,我是不知道它到底被广泛应用到哪里了。...但是WeakMap有一个特别有用的地方:存储私有变量。 我们知道,JS中没有真正的私有,但是我在使用TS编译器就运用了WeakMap来储存所谓的私有变量。...由于WeakMap对对象的引用不会被GC当回事,所以当我们foo1或foo2使用完毕被回收后,它们在WeakMap里的引用也会被清除掉,这样就节约了内存。...顺带一提,同WeakSet一样,WeakMap的键必须是对象: barStorage.set(1, 2) // TypeError: Invalid value used as weak map key

35320

《你不知道的 WeakMap》番外篇

学习时间:2020.05.26 学习章节:《你不知道的 WeakMap》 一、主要知识点 原文主要复习了“JavaScript垃圾回收机制”,“Map/WeakMap区别”和“WeakMap 属性和方法...Map VS WeakMap 2.1 Map 和 WeakMap 主要区别 WeakMap 结构与 Map 结构类似,也是用于生成键值对的集合。...WeakMap介绍和应用 3.1 WeakMap 介绍 WeakMap 对象是一组键/值对的集合,其中的键是 弱引用 的。 WeakMap 的 key 只能是 Object 类型。...3.2 WeakMap 应用 原文中介绍了“通过 WeakMap 缓存计算结果”和“在 WeakMap 中保留私有数据”两种应用场景。 另外还有一种比较常见的场景:以 DOM节点作为键名的场景。...好处在于,当DOM元素移除时,对应 WeakMap 记录也会自动移除: const wm = new WeakMap(); const weakMap

52900

Set、Map、WeakSet、WeakMap详细介绍

引言--Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。...WeakMap中使用的对象作为键是弱引用关联的,即如果没有其他引用指向该对象,则该对象会被垃圾回收。WeakMap没有迭代器,不能遍历其中的键值对。...使用场景存储私有数据:可以使用WeakMap来存储私有数据,只有拥有对应的键才能访问到私有数据。...没有迭代器,不能遍历其中的键值对总结--通过以上代码示例,我们可以看到Set、Map、WeakSet和WeakMap的用法和特性。...而在WeakSet和WeakMap中,存储的对象是弱引用关联的。这意味着如果一个对象只有在WeakSet或WeakMap中存在引用,并且没有其他地方引用它,那么该对象将被垃圾回收机制自动回收。

13330

介绍下 Set、Map、WeakSet 和 WeakMap 的区别?

WeakMap WeakMap 对象是一组键值对的集合,其中的键是弱引用对象,而值可以是任意。 注意,WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用。...WeakMap 中,每个键对自己所引用对象的引用都是弱引用,在没有其他引用和该键引用同一对象,这个对象将会被垃圾回收(相应的key则变成无效的),所以,WeakMap 的 key 是不可枚举的。...key关联对象 delete(key):移除 key 的关联对象 let myElement = document.getElementById('logo'); let myWeakmap = new WeakMap...,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏 不能遍历,方法有add、delete、has Map 本质上是键值对的集合,类似集合 可以遍历,方法很多可以跟各种数据格式转换 WeakMap

1.6K20

干货 | WeakMap的特性及应用场景

“ 我们先从 WeakMap 的特性说起,然后聊聊 WeakMap 的一些应用场景。 ”     特性     1....WeakMap 只接受对象作为键名  const map = new WeakMap();map.set(1, 2);// TypeError: Invalid value used as weak...也正是因为这样的特性,WeakMap 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakMap 不可遍历。...所以 WeakMap 不像 Map,一是没有遍历操作(即没有keys()、values()和entries()方法),也没有 size 属性,也不支持 clear 方法,所以 WeakMap只有四个方法可用...私有属性 WeakMap 也可以被用于实现私有变量,不过在 ES6 中实现私有变量的方式有很多种,这只是其中一种: const privateData = new WeakMap

1.1K10

【基础复盘】ES6中 的 WeakMap 你会用了吗?

前言 我们先从 WeakMap 的特性说起,然后聊聊 WeakMap 的一些应用场景。 特性 1....WeakMap 只接受对象作为键名 const map = new WeakMap(); map.set(1, 2); // TypeError: Invalid value used as weak...也正是因为这样的特性,WeakMap 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakMap 不可遍历。...所以 WeakMap 不像 Map,一是没有遍历操作(即没有keys()、values()和entries()方法),也没有 size 属性,也不支持 clear 方法, 所以 WeakMap只有四个方法可用...私有属性 WeakMap 也可以被用于实现私有变量,不过在 ES6 中实现私有变量的方式有很多种,这只是其中一种: const privateData = new WeakMap(); class Person

59330
领券