0

0

JavaScript WeakMap与WeakSet应用

狼影

狼影

发布时间:2025-10-25 18:49:02

|

380人浏览过

|

来源于php中文网

原创

WeakMap和WeakSet通过弱引用实现内存安全的对象关联与状态跟踪。1. WeakMap以对象为键,用于私有数据封装、缓存计算结果和DOM元信息管理,对象销毁后键值对自动释放;2. WeakSet存储对象,用于防止重复操作、对象去重和临时标记,支持唯一性判断且不阻止垃圾回收;3. 二者均不可遍历、无size属性,核心优势是避免内存泄漏,适用于需自动内存管理的场景。

javascript weakmap与weakset应用

WeakMap 和 WeakSet 是 JavaScript 中两种特殊的集合类型,它们与 Map 和 Set 的主要区别在于对对象的“弱引用”特性。这个特性让它们在特定场景下非常有用,尤其是在处理内存管理和对象关联数据时。

WeakMap:存储对象相关元数据

WeakMap 只接受对象作为键,且这些键是“弱引用”的,不会阻止垃圾回收机制回收这些对象。

常见应用场景包括:

  • 私有数据封装:为类的实例绑定私有属性,而不暴露在公共接口中。例如,用 WeakMap 存储实例的敏感配置或内部状态,外部无法直接访问。
  • 缓存对象计算结果:比如某个函数根据对象计算复杂值,可以用 WeakMap 缓存结果。一旦对象被销毁,缓存也随之释放,避免内存泄漏。
  • DOM 元信息管理:为 DOM 节点附加额外信息(如状态标记、事件标识),当节点从页面移除后,相关数据自动被回收。
示例:用 WeakMap 实现私有属性
const privateData = new WeakMap();

class Person {
  constructor(name) {
    privateData.set(this, { name });
  }
  getName() {
    return privateData.get(this).name;
  }
}

WeakSet:跟踪对象生命周期

WeakSet 只能存放对象,且这些对象也是弱引用。它适合用于标记或跟踪某些对象是否处于特定状态。

立即学习Java免费学习笔记(深入)”;

典型用途有:

php中级教程之ajax技术
php中级教程之ajax技术

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。它不是新的编程语言,而是一种使用现有标准的新方法,最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。《php中级教程之ajax技术》带你快速

下载
  • 防止重复操作:比如异步任务中,将正在处理的对象加入 WeakSet,避免重复发起请求。对象销毁后,标记自动清除。
  • 对象注册与去重:在观察者模式或事件系统中,使用 WeakSet 确保同一个对象只被监听一次,并在对象消失后自动解除关系。
  • 临时状态标记:标记某个对象是否已初始化、是否正在渲染等,不影响其生命周期。
示例:用 WeakSet 避免重复渲染
const rendering = new WeakSet();

function renderComponent(component) {
  if (rendering.has(component)) return;
  rendering.add(component);
  // 执行渲染逻辑
}

为什么选择 WeakMap / WeakSet?

核心优势在于“不干扰垃圾回收”。如果用普通对象或 Map/Set 来关联数据,即使目标对象不再使用,只要引用存在,就无法被回收,容易造成内存泄漏。

WeakMap 和 WeakSet 的弱引用机制正好解决这个问题——只要对象变成不可达,它在 WeakMap/WeakSet 中的记录也会被自动清理。

注意:它们不支持遍历、没有 size 属性、也不能清空所有内容,这是为实现弱引用所做的权衡。

基本上就这些。WeakMap 和 WeakSet 不常用,但在需要自动内存管理的场景中,是非常有力的工具。用好它们,能让代码更安全、更高效。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1100

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

189

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1500

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.19

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

60

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

21

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号