当前位置:首页 > JavaScript

js实现weakmap

2026-04-05 07:28:38JavaScript

js实现weakmap

WeakMap 的基本概念

WeakMap 是 JavaScript 中的一种集合类型,用于存储键值对。与 Map 不同,WeakMap 的键必须是对象(非原始值),且键是弱引用的。这意味着当键对象没有其他引用时,它会被垃圾回收机制自动回收,对应的键值对也会从 WeakMap 中移除。

js实现weakmap

WeakMap 的特点

  • 键必须是对象(非原始值如字符串、数字等)。
  • 键是弱引用,不会阻止垃圾回收。
  • 不可枚举,没有方法直接获取所有键或值。
  • 支持的方法:set()get()has()delete()

创建和使用 WeakMap

const weakMap = new WeakMap();

const key1 = {};
const key2 = {};

// 设置键值对
weakMap.set(key1, 'value1');
weakMap.set(key2, 'value2');

// 获取值
console.log(weakMap.get(key1)); // 输出: 'value1'

// 检查键是否存在
console.log(weakMap.has(key1)); // 输出: true

// 删除键值对
weakMap.delete(key1);
console.log(weakMap.has(key1)); // 输出: false

WeakMap 的垃圾回收行为

当键对象没有其他引用时,垃圾回收机制会自动回收该键,并从 WeakMap 中移除对应的键值对。

let key = {};
const weakMap = new WeakMap();
weakMap.set(key, 'some value');

// 移除 key 的引用
key = null;

// 垃圾回收后,weakMap 中的键值对会被自动移除

WeakMap 的应用场景

  • 私有数据存储:WeakMap 可用于模拟对象的私有属性,因为外部无法直接访问 WeakMap 中的键值对。
  • 缓存机制:当缓存的对象不再需要时,WeakMap 会自动清理对应的缓存条目,避免内存泄漏。

WeakMap 与 Map 的区别

特性 WeakMap Map
键类型 必须是对象 任意类型
键引用 弱引用 强引用
可枚举性 不可枚举 可枚举
垃圾回收 自动清理无引用的键 需手动清理

注意事项

  • WeakMap 没有 size 属性或 clear() 方法。
  • 不支持迭代(如 forEach()keys()values())。
  • 主要用于与对象生命周期相关的场景,避免内存泄漏。

通过以上内容,可以全面了解 JavaScript 中 WeakMap 的实现和使用方法。

标签: jsweakmap
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…