首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Czy‘s Blog

    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));

    75520发布于 2020-08-27
  • 来自专栏程序技术知识

    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 实例,也没办法看到其中的内容。

    3.4K21编辑于 2022-05-12
  • 来自专栏前端小学生

    Map、WeakMap、Set、WeakSet区别

    可以使用二维数组初始化一个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方法图片

    71930编辑于 2023-05-29
  • 来自专栏前端小作坊

    ECMAScript 6之WeakMap

    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来设置或获取键对应值。

    72620发布于 2018-08-01
  • 来自专栏人生代码

    Vue 3 高阶指南之 WeakMap

    高阶指南之 WeakMapWeakMap」 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 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

    1.3K20发布于 2020-11-03
  • 来自专栏前端达人

    【ES6基础】Map与WeakMap

    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.

    1.1K30发布于 2019-05-04
  • 来自专栏js笔记

    set、map、WeakSet和WeakMap

    对象存储对象是弱引用的,对象会被垃圾回收机制回收掉 操作方法 add(value):添加元素,元素类型为引用类型 has(value):判断是否包含某个元素 delete(value):删除某个value WeakMap weakMap对象是一组键值对的集合,其中键是弱引用,所以键不可以为基本数据类型,必需是引用类型,值可以为任意值 操作方法 has(key):是否存在某个键 get(key):通过key值获取value

    39210编辑于 2022-10-25
  • 来自专栏code秘密花园

    终于在 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 抖音前端正急缺人才,如果你想加入我们,欢迎加我微信和我联系。

    1.1K20发布于 2021-10-19
  • 来自专栏随便写写-kifuan

    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

    57920编辑于 2022-10-24
  • 来自专栏前端到底怎么学好来

    Set、Map、WeakSet、WeakMap详细介绍

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

    68731编辑于 2023-11-17
  • 来自专栏全栈修仙之路

    你不知道的 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,你可以将先前计算的结果与对象相关联,而不必担心内存管理。

    1.5K33发布于 2020-05-27
  • 来自专栏掘金安东尼

    JS 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

    2.4K10编辑于 2022-09-22
  • 来自专栏前端自习课

    《你不知道的 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

    77300发布于 2020-06-15
  • 来自专栏前端达人

    【ES6基础】Map与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

    1.4K40发布于 2019-05-14
  • 来自专栏web秀

    介绍下 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

    2.4K20发布于 2019-11-04
  • 来自专栏腾讯NEXT学位

    干货 | 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.4K10发布于 2019-07-15
  • 来自专栏终身学习者

    Vue 3.3.6 发布了,得益于WeakMap,它更快了

    性能改进和DOM节点的附加属性的类型检查使新的Vue值得更新。Vue团队确实做了很多工作。实际上,他们在同一天发布了两个子版本。Vue 3.3.5 和 3.3.6 都在2023年10月20日发布。

    62110编辑于 2024-02-12
  • 来自专栏WflynnWeb

    ES6面试点-WeakMap与Map的区别

    什么是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 内部的引用依然存在。

    1.5K30编辑于 2022-10-28
  • 来自专栏小丞前端库

    浅析 Map 和 WeakMap 区别以及使用场景

    WeakMap 这篇文章会先从Map再到WeakMap 一、为什么是 Map ? 这些问题后面都会讲到 六、WeakMap 的特性 我们先从 WeakMap 的特性讲起 1. WeakMap 的键名引用的对象是弱引用 这里懵了挺久的,但是这是WeakMap结构的关键所在 要想读懂这句话,不容易,我们需要先知道强引用和弱引用 2.1 什么是强引用? 了解了WeakMap的特性,相信对“为什么要有WeakMap?” 八、WeakMap 的使用场景 1.

    3.3K64发布于 2021-08-16
  • 来自专栏程序员成长指北

    【基础复盘】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

    91330编辑于 2022-11-28
领券