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

MapWeakMap

MapWeakMap Map对象用来保存键值对,并且能够记住键的原始插入顺序,任何对象或者原始值都可以作为键或者是值。...== 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对象。

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

【ES6基础】MapWeakMap

Map.png ES6里除了增加了Set(集合类型)外,笔者在这篇文章《Set与WeakSet》有过介绍,今天这篇文章将介绍引入的新类型——Map(映射类型)及WeakMap。...本篇文章将从以下方面进行介绍: Map代码示例 Map常用方法示例 Map与Object的区别 weakMap介绍 本篇文章阅读时间预计5分钟 Map代码示例 Map的键和值可以是任何数据类型,键值对按照插入顺序排列...以下三点是MapWeakMap的主要区别: 1.Map对象的键可以是任何类型,但WeakMap对象中的键只能是对象引用 2.WeakMap不能包含无引用的对象,否则会被自动清除出集合(垃圾回收机制)。...下段代码示例验证了WeakMap的以上特性: let weakmap = new WeakMap(); (function(){ let o = {n: 1}; weakmap.set(o,...WeakMap相对于Map是一个不可枚举的对象,必须使用对象作为键值。如何更好的使用MapWeakMap还需要具体结合我们实际的业务场景进行灵活使用。

82130

Set、Map、WeakSet、WeakMap详细介绍

引言--Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。...缺点相对于对象,Map的性能稍差。使用场景存储和查找数据:可以使用Map来存储和查找数据,键值对的形式更加直观和灵活。...// 存储和查找数据const map = new Map();map.set('name', 'John');map.set('age', 30);console.log(map.get('name'...没有迭代器,不能遍历其中的键值对总结--通过以上代码示例,我们可以看到Set、Map、WeakSet和WeakMap的用法和特性。...另外,由于弱引用关联的特性,WeakSet和WeakMap没有提供像Set和Map那样的迭代器方法来遍历元素。也没有size属性来获取元素个数。这是为了确保不会干扰垃圾回收机制对对象的处理。

13230

【ES6基础】MapWeakMap

本篇文章将从以下方面进行介绍: Map代码示例 Map常用方法示例 Map与Object的区别 weakMap介绍 本篇文章阅读时间预计5分钟 01 Map代码示例 Map的键和值可以是任何数据类型,键值对按照插入顺序排列...以下三点是MapWeakMap的主要区别: 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相对于Map是一个不可枚举的对象,必须使用对象作为键值。如何更好的使用MapWeakMap还需要具体结合我们实际的业务场景进行灵活使用。

1.2K40

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

let map = new Map(); map.set(-0, 123); map.get(+0) // 123 map.set(true, 1); map.set('true', 2); map.get...WeakMap WeakMap 对象是一组键值对的集合,其中的键是弱引用对象,而值可以是任意。 注意,WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用。...WeakMap 中,每个键对自己所引用对象的引用都是弱引用,在没有其他引用和该键引用同一对象,这个对象将会被垃圾回收(相应的key则变成无效的),所以,WeakMap 的 key 是不可枚举的。...key关联对象 delete(key):移除 key 的关联对象 let myElement = document.getElementById('logo'); let myWeakmap = new WeakMap...本质上是键值对的集合,类似集合 可以遍历,方法很多可以跟各种数据格式转换 WeakMap 只接受对象作为键名(null除外),不接受其他类型的值作为键名 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收

1.6K20

浅析 MapWeakMap 区别以及使用场景

在阅读红宝书时遇到了 WeakMap 这个关键字,第一次见感觉没啥用,是我见识浅了,其实还是有点用的,有多大我不知道(快跑) 希望这一篇文章能让你对 Map 有更好的理解,或者能够帮你理解 Map...和 WeakMap 这篇文章会先从Map再到WeakMap 一、为什么是 Map ?...obj[k] = v } 对象转为 Map for( let k of Object.keys(obj)){ map.set(k,obj[k]) } 五、什么是 WeakMap ?...已经有了一定的答案 七、MapWeakMap 的区别 看到这里相信心中已经有答案了 Map 的键可以是任意类型,WeakMap 只接受对象作为键(null除外),不接受其他类型的值作为键...Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键; WeakMap 的键是弱引用,键所指向的对象可以被垃圾回收,此时键是无效的 Map 可以被遍历, WeakMap 不能被遍历

2.4K53

深入理解 ES6 新增的数据结构 MapWeakMap

Map(3) {1 => "one", 2 => "two", true => "okk"} 二、WeakMap 1、WeakMap 的基本用法 WeakMap 的设计目的在于,键名是对象的弱引用(垃圾回收机制不将该引用考虑在内...基本上,WeakMap 的专用场合就是,它的键所对应的对象,可能会在将来消失,因此 WeakMap 结构有助于防止内存泄漏 下面是 WeakMap 结构的一个例子: var wm = new WeakMap...实例 我们将一个 DOM 节点 div1 作为键名,然后销毁这个节点,div1 对应的键就自动消失了,再引用这个键名就返回 undefined 2、WeakMapMap 的区别 ① WeakMap...的键名,都会报错,因为不是对象 ② WeakMap 没有 size 属性 ③ WeakMap 没有遍历操作 WeakMap 没有 key()、values() 和 entries() 方法,而且无法清空...(即不支持 clear 方法),这与 WeakMap 的键不被计入引用、被垃圾回收机制忽略有关 3、WeakMap 实例的操作方法 除了没有 clear() 方法,其它跟 Map 一样,都含有 get(

58220

js WeakMap用法

ECMAScript 6 新增的“弱映射”(WeakMap)是一种新的集合类型,为这门语言带来了增强的键/值对存储机制。WeakMapMap 的“兄弟”类型,其 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

ES6集合引用类型MapWeakMap |8月更文挑战

weakMap 什么是WeakMap 在 JavaScript 里,map API 可以通过使其四个 API 方法共用两个数组(一个存放键,一个存放值)来实现。...原生 WeakMap 的结构是特殊且有效的,其用于映射的 key 只有在其没有被回收时才是有效的。 正由于这样的弱引用,WeakMap 的 key 是不可枚举的 (没有方法能给出所有的 key)。...因此,如果你想要这种类型对象的 key 值的列表,你应该使用 [Map] 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。...WeakMap的建只能是对象类型 如果变成object类型当作键存储就可以执行 const myWaekMap = new WeakMap(); const arr =... {ƒ => "存储a=1"} 另外 WeakMap的值也可以是一个对象,但这样没有太大意义 const myWaekMap = new WeakMap(); const arr

33020

一文搞清楚ES6新增数据结构 Symbol Map WeakMap Set WeakSet

for (const [key, value] of map2) { console.log(key, value) } WeakMap WeakMap的使用 和Map类型的另外一个数据结构称之为WeakMap...和Map的区别二: const map = new Map() map.set(obj, "aaa") const weakMap = new WeakMap() weakMap.set(obj, "...代码演示 可以做对象的依赖收集 先把对象的属性和属性对应的依赖,存储为Map结构,一个key 对应一组收集的函数依赖 然后把对象 和Map 结构存储为weakMap 当代理的对象有变化时,我们去weakMap...const weakMap = new WeakMap() // 2.收集依赖结构 // 2.1.对obj1收集的数据结构 const obj1Map = new Map() obj1Map.set...("name", [obj1NameFn1, obj1NameFn2]) obj1Map.set("age", [obj1AgeFn1, obj1AgeFn2]) weakMap.set(obj1, obj1Map

27610

ECMAScript 6之WeakMap

这也是一篇关于WeakMap的笔记。 ---- 简介 WeakMapMap(另一个ES6的新API)都是键值对象,有着类似的API:set、get、has和delete。...之所以打引号是因为并不是不能用对象,而是对象会转换成字符串,如下: var map = {}; var key = {}; map[key] = 'value'; map['[object Object...]'] === 'value'; // true 于是ES6就提供了MapWeakMap的API,可以实现键是对象的情况。...于是又提供了WeakMap,它的键只能是一个非空(null)对象,而Map的键则还可以是除对象外的原始类型。WeakMap的重要特点在于:对键的引用是弱引用,而不是一般的强引用。...看如下例子: var map = new WeakMap(), element = document.querySelector(".element"); // 对象element作为键,"Original

55320

Vue 3 高阶指南之 WeakMap

在 JavaScript 里,map API 可以通过使其四个 API 方法共用两个数组(一个存放键,一个存放值)来实现。给这种 map 设置值时会同时将键和值添加到这两个数组的末尾。...当从该 map 取值的时候,需要遍历所有的键,然后使用索引从存储值的数组中检索出相应的值。...因此,如果你想要这种类型对象的 key 值的列表,你应该使用 Map。 基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。...属性 WeakMap.length length 属性的值为 0。 ? WeakMap.protorype WeakMap 构造器的原型。允许添加属性到所有的 WeakMap 对象。 ?...使用 WeakMap const wm1 = new WeakMap(), wm2 = new WeakMap(), wm3 = new WeakMap(); const o1

98120

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

35220

《你不知道的 WeakMap》番外篇

学习时间:2020.05.26 学习章节:《你不知道的 WeakMap》 一、主要知识点 原文主要复习了“JavaScript垃圾回收机制”,“Map/WeakMap区别”和“WeakMap 属性和方法...Map VS WeakMap 2.1 MapWeakMap 主要区别 WeakMap 结构与 Map 结构类似,也是用于生成键值对的集合。...区别: Map  对象的键可以是任何类型,但 WeakMap  对象中的键只能是对象引用( null 除外);const map = new WeakMap(); map.set(1, 2) // TypeError...Invalid value used as weak map key WeakMap  不能包含无引用的对象,否则会被自动清除出集合(垃圾回收机制);const map = new WeakMap();...'hello'); map.map(item => console.log(item)) //Uncaught TypeError: map.map is not a function WeakMap

52700

你不知道的 WeakMap

相信很多读者对 ES6 引入的 Map 已经不陌生了,其中的一部分读者可能也听说过 WeakMap。既生 Map 何生 WeakMap?...二、为什么需要 WeakMap 2.1 MapWeakMap 的区别 相信很多读者对 ES6 中 Map 已经不陌生了,已经有了 Map,为什么还会有 WeakMap,它们之间有什么区别呢?...MapWeakMap 之间的主要区别: Map 对象的键可以是任何类型,但 WeakMap 对象中的键只能是对象引用; WeakMap 不能包含无引用的对象,否则会被自动清除出集合(垃圾回收机制)...所以对于前面遇到的垃圾回收问题,我们可以使用 WeakMap 来解决,具体如下: let sem = { name: "Semlinker" }; let map = new WeakMap(); map.set...下面我们来动手测试一下同个场景下 MapWeakMap 对垃圾回收的影响。首先我们分别创建两个文件:map.js 和 weakmap.js。

1.2K33
领券