当前位置:首页 > JavaScript

js实现weakmap

2026-04-05 07:28:38JavaScript

WeakMap 的基本概念

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

js实现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实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js手势实现

js手势实现

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

节流js实现

节流js实现

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

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…