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 实例,也没办法看到其中的内容。
== 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));
可以使用二维数组初始化一个map,如:图片二、WeakMap与Map对比a. WeakMap的key必须是对象,否则报错b....WeakMap不可迭代,但可以使用map.set()、map.has()、map.delete()方法,但没有get方法c....WeakMap是弱引用,垃圾回收时,如果手动清理引用,会造成WeakMap的数据丢失,但Map不会,如:图片图片上图可知,当obj被GC回收后,Map将继续保持引用,但WeakMap却造成了数据丢失。...不可使用二维数组初始化WeakMap三、Set与Map对比a....Set也是使用for-of进行迭代四、WeakSet与Set基本上和WeakMap一致,但WeakSet没有get方法图片
ECMAScript 6之WeakMap ECMAScript 6中加入了很多新的特性,其中有一个有用的API:WeakMap。Nicholas的博文做了详细的介绍。...这也是一篇关于WeakMap的笔记。 ---- 简介 WeakMap与Map(另一个ES6的新API)都是键值对象,有着类似的API:set、get、has和delete。...为了更好的解释WeakMap,先谈下Javascript中的键值对象。...于是又提供了WeakMap,它的键只能是一个非空(null)对象,而Map的键则还可以是除对象外的原始类型。WeakMap的重要特点在于:对键的引用是弱引用,而不是一般的强引用。...即WeakMap仅仅是提供了一个“键”与“值”之间的接口,通过WeakMap来设置或获取键对应值。
高阶指南之 WeakMap 「WeakMap」 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。...基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。 属性 WeakMap.length length 属性的值为 0。 ?...WeakMap.protorype WeakMap 构造器的原型。允许添加属性到所有的 WeakMap 对象。 ?...WeakMap.prototype.set(key, value) 在WeakMap中设置一组key关联对象,返回这个 WeakMap对象。...使用 WeakMap const wm1 = new WeakMap(), wm2 = new WeakMap(), wm3 = new WeakMap(); const o1
WeakMap 与集合类型(Set)一样,映射类型也有一个Weak版本的WeakMap。...以下三点是Map和WeakMap的主要区别: 1.Map对象的键可以是任何类型,但WeakMap对象中的键只能是对象引用 2.WeakMap不能包含无引用的对象,否则会被自动清除出集合(垃圾回收机制)。...下段代码示例验证了WeakMap的以上特性: let weakmap = new WeakMap(); (function(){ let o = {n: 1}; weakmap.set(o,...(s)); console.log(...weakmap); // exception thrown weakmap.delete(s); weakmap.clear(); // Exception,...no such function let weakmap_1 = new WeakMap([[{}, 2], [{}, 5]]); //this works console.log(weakmap_1.
对象存储对象是弱引用的,对象会被垃圾回收机制回收掉 操作方法 add(value):添加元素,元素类型为引用类型 has(value):判断是否包含某个元素 delete(value):删除某个value WeakMap...weakMap对象是一组键值对的集合,其中键是弱引用,所以键不可以为基本数据类型,必需是引用类型,值可以为任意值 操作方法 has(key):是否存在某个键 get(key):通过key值获取value
介绍 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
也就是 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 抖音前端正急缺人才,如果你想加入我们,欢迎加我微信和我联系。
学习时间: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
相信很多读者对 ES6 引入的 Map 已经不陌生了,其中的一部分读者可能也听说过 WeakMap。既生 Map 何生 WeakMap?...二、为什么需要 WeakMap 2.1 Map 和 WeakMap 的区别 相信很多读者对 ES6 中 Map 已经不陌生了,已经有了 Map,为什么还会有 WeakMap,它们之间有什么区别呢?...三、WeakMap 简介 WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。WeakMap 的 key 只能是 Object 类型。...WeakMap.prototype.set(key, value):在 WeakMap 中设置一组 key 关联对象,返回这个 WeakMap 对象。...四、WeakMap 应用 4.1 通过 WeakMap 缓存计算结果 使用 WeakMap,你可以将先前计算的结果与对象相关联,而不必担心内存管理。
引言--Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。...WeakMap中使用的对象作为键是弱引用关联的,即如果没有其他引用指向该对象,则该对象会被垃圾回收。WeakMap没有迭代器,不能遍历其中的键值对。...使用场景存储私有数据:可以使用WeakMap来存储私有数据,只有拥有对应的键才能访问到私有数据。...没有迭代器,不能遍历其中的键值对总结--通过以上代码示例,我们可以看到Set、Map、WeakSet和WeakMap的用法和特性。...而在WeakSet和WeakMap中,存储的对象是弱引用关联的。这意味着如果一个对象只有在WeakSet或WeakMap中存在引用,并且没有其他地方引用它,那么该对象将被垃圾回收机制自动回收。
WeakMap 就是来解决这个问题的: 对比 2 组代码,分别是 map 和 weakMap 在这个问题下的表现: Map let john = { name: "John" }; let map =...``` let john = { name: "John" }; let weakMap = new WeakMap(); weakMap.set(john, "..."); john = null;...此外特别说明:WeakMap 和 Map 的很重要的不同点就是,WeakMap 的键必须是对象,不能是原始值。...WeakMap 不支持迭代以及 keys(),values() 和 entries() 方法。所以没有办法获取 WeakMap 的所有键或值。...另外 WeakMap 只有以下的方法:weakMap.get(key)、weakMap.set(key, value)、weakMap.delete(key)、weakMap.has(key) 所以 WeakMap
04 WeakMap 与集合类型(Set)一样,映射类型也有一个Weak版本的WeakMap。...以下三点是Map和WeakMap的主要区别: Map对象的键可以是任何类型,但WeakMap对象中的键只能是对象引用 WeakMap不能包含无引用的对象,否则会被自动清除出集合(垃圾回收机制)。...下段代码示例验证了WeakMap的以上特性: let weakmap = new WeakMap(); (function(){ let o = {n: 1}; weakmap.set(...(weakmap.get(s)); console.log(...weakmap); // exception thrown weakmap.delete(s); weakmap.clear(); //...(weakmap_1.size); //undefined” const weakmap=new WeakMap(); let keyObject={id:1}; const valObject={score
“ 我们先从 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
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
性能改进和DOM节点的附加属性的类型检查使新的Vue值得更新。Vue团队确实做了很多工作。实际上,他们在同一天发布了两个子版本。Vue 3.3.5 和 3.3....
什么是WeakMap WeakMap结构与Map结构类似,也是用于生成键值对的集合。...new WeakMap([[k1, 'foo'], [k2, 'bar']]); wm2.get(k2) // "bar" WeakMap与Map的区别 首先,WeakMap只接受对象作为键名(null...一个典型应用场景是,在网页的 DOM 元素上添加数据,就可以使用WeakMap结构。当该 DOM 元素被清除,其所对应的WeakMap记录就会自动被移除。...Weakmap 保存的这个键值对,也会自动消失。 总之,WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏。...所以,即使在 WeakMap 外部消除了obj的引用,WeakMap 内部的引用依然存在。
和 WeakMap 这篇文章会先从Map再到WeakMap 一、为什么是 Map ?...这些问题后面都会讲到 六、WeakMap 的特性 我们先从 WeakMap 的特性讲起 1....WeakMap 的键名引用的对象是弱引用 这里懵了挺久的,但是这是WeakMap结构的关键所在 要想读懂这句话,不容易,我们需要先知道强引用和弱引用 2.1 什么是强引用?...了解了WeakMap的特性,相信对“为什么要有WeakMap?”...八、WeakMap 的使用场景 1.
前言 我们先从 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
领取专属 10元无门槛券
手把手带您无忧上云