快速掌握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)