快速掌握WeakMap与Map的区别

简介: 快速掌握WeakMap与Map的区别

快速掌握WeakMap与Map的区别
在JavaScript中,Map和WeakMap是ES6(ECMAScript 2015)中新增的两种非常重要的数据结构,它们都用于存储键值对,但各自有着不同的应用场景和特性。本文将从键的类型、引用方式、遍历能力、以及方法差异等几个方面详细介绍Map和WeakMap的区别,帮助前端开发者快速掌握这两种数据结构。

键的类型
Map
任意类型:Map的键可以是任意类型的值,包括基本数据类型(如字符串、数字、布尔值)和对象引用。这使得Map非常灵活,能够存储多种类型的键值对。

WeakMap

对象引用:WeakMap的键只能是对象引用,不能是基本数据类型的值。这是因为WeakMap的设计初衷是为了存储对象之间的关联,同时不影响这些对象的垃圾回收机制。

引用方式
Map
强引用:Map中的键是强引用,即只要Map中的键或值存在,无论键或值是否被其他对象引用,Map对象都会一直保留这个键值对,不会被垃圾回收机制回收。

WeakMap

弱引用:WeakMap中的键是弱引用,如果WeakMap的键不再被其他对象引用(即没有其他引用指向这个键对象),那么这个键值对就会被垃圾回收机制自动删除。这种设计有助于防止内存泄漏。

js 代码解读复制代码let obj1 = {}
let obj2 = {}

const map1 = new WeakMap()
map1.set(obj1, 1)

const map2 = new Map()
map2.set(obj2, 2)

相关文章
|
4月前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
84 3
|
4月前
|
JavaScript 前端开发 索引
问js的forEach和map的区别
JavaScript中的`forEach`和`map`都是数组迭代方法。`forEach`遍历数组但不修改原数组,无返回值;它接受回调函数处理元素。`map`则遍历数组并返回新数组,新数组元素为回调函数处理后的结果。两者都接收元素、索引和数组作为回调函数参数。
38 7
WK
|
12天前
map和filter的区别是什么
在编程中,`map` 和 `filter` 是处理数组或集合时常用的两个函数。`map` 用于将每个元素通过指定函数转换后生成新的数组,而 `filter` 则根据条件筛选出符合条件的元素组成新数组。两者的主要区别在于:`map` 的返回数组长度与原数组相同,但元素被转换;`filter` 的返回数组长度可能不同,只包含符合条件的元素。
WK
10 2
|
28天前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
1月前
|
分布式计算 Serverless 数据处理
|
26天前
|
存储 Java 索引
|
2月前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
35 0
|
3月前
|
存储 安全 程序员
老程序员分享:List、Map、Set之间的联系与区别:
老程序员分享:List、Map、Set之间的联系与区别:
|
3月前
map::operator[] 底层大致介绍及与 map::insert() 区别
map::operator[] 底层大致介绍及与 map::insert() 区别
|
3月前
|
存储 JavaScript 前端开发
Object和Map的区别
Object和Map的区别