理解JavaScript中的WeakSet和WeakMap

news2025/6/20 20:20:07

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1. WeakSet
      • 2. WeakMap
      • 3. 异同点
    • 总结:
    • 参考资料:

摘要:

本文详细介绍了JavaScript中的WeakSetWeakMap的概念、用途以及它们的异同点,帮助读者更好地理解这两种数据结构。

引言:

JavaScript中,我们经常需要存储和管理对象。有时候,我们希望能够跟踪某个对象的所有实例,或者存储与某个对象关联的其他对象。这时,WeakSetWeakMap就派上用场了。它们都是用来存储对象的,但是WeakSet存储的是对象集合,而WeakMap存储的是键值对。

正文:

1. WeakSet

WeakSet是一种特殊类型的集合,它存储的是弱引用对象。这意味着,如果集合中的对象被垃圾回收器回收,它们会自动从WeakSet中移除。

WeakSet的主要用途是存储对象实例,例如,用于存储某个类的所有实例。

示例:

const weakSet = new WeakSet();
const obj1 = { a: 1 };
const obj2 = { b: 2 };
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // true
console.log(weakSet.has(obj2)); // true
obj1 = null; // 对象被回收
console.log(weakSet.has(obj1)); // false

2. WeakMap

WeakMap是一种特殊类型的Map,它的键是弱引用的对象。这意味着,如果WeakMap中的键对象被垃圾回收器回收,它们会自动从WeakMap中移除

WeakMap的主要用途是存储与某个对象关联的其他对象。

示例:

const weakMap = new WeakMap();
const obj1 = { a: 1 };
const obj2 = { b: 2 };
weakMap.set(obj1, 'value1');
weakMap.set(obj2, 'value2');
console.log(weakMap.get(obj1)); // 'value1'
console.log(weakMap.get(obj2)); // 'value2'
obj1 = null; // 对象被回收
console.log(weakMap.get(obj1)); // undefined

3. 异同点

  • 存储类型:WeakSet存储对象集合,WeakMap存储键值对
  • 弱引用:两者都使用弱引用存储对象,不用担心对象被回收的问题。
  • 操作方法:WeakSet有add、delete和has方法,而WeakMap有set、get、delete和has方法。

总结:

WeakSet和WeakMap是JavaScript中处理对象的特殊数据结构。WeakSet用于存储对象集合,而WeakMap用于存储键值对。它们都使用弱引用存储对象,不用担心对象被回收的问题。掌握这两种数据结构,可以帮助我们更好地管理对象和关联数据。

参考资料:

  1. WeakSet - MDN Web Docs
  2. WeakMap - MDN Web Docs

📚 以上内容仅供参考,具体实践还需结合项目实际情况。希望本文能为你在理解JavaScript中的WeakSetWeakMap方面带来一定的启示和帮助。如有疑问,欢迎留言交流。🤝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1503355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】科研代码学习:五 Data Collator,Datasets

【Python】科研代码学习:五 Data Collator,Datasets Data CollatorDefault data collatorDefaultDataCollatorDataCollatorWithPaddingPadding 其他 Data Collator Datasetsload_dataset其他一些基本操作 Data Collator HF官网API:Data Coll…

网易再战腾讯,《永劫无间》宣发捡大漏

《王者荣耀》代言人唯爱《永劫无间》? 最近时代少年团成员严浩翔疑似打赏《永劫无间》女主播一事,在饭圈和游戏圈引起了轩然大波,“男偶像打赏女主播”和“《王者荣耀》代言人爱玩《永劫无间》”,一时不知道哪个行为更炸裂。 虽…

力扣hot100题解(python版63-68题)

63、搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输…

Android Studio下载gradle超时问题解决

方法一 1. 配置根目录的setting.gradle.kts文件 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urluri ("https://maven.aliyun.com/repos…

结构体内存对齐详解

目录 结构体对齐: 为什么要进行内存对齐? 关于结构体的详解文章:C语言结构体详解_结构体变量和结构体类型举例-CSDN博客 结构体对齐: 存储的时候和当前存储的成员类型字节大小和默认对齐数比较,取小值 存在该对齐数的…

Windows11安装FFmpeg最新版本

打开终端: 输入 winget install ffmpeg 然后输入 Y 回车后出现如下图: 正在下载FFmpeg 6.1 安装成功 测试

cocos creator 3.7.2使用shader实现图片扫光特效

简介 功能:图片实现扫光效果 引擎:cocos Creator 3.7.2 开发语言:ts 完整版链接 链接https://lengmo714.top/284d90f4.html 效果图 shader代码 // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. CCEffect %{techniques:- pas…

vue 下载的插件从哪里上传?npm发布插件详细记录

文章参考: 参考文章一: 封装vue插件并发布到npm详细步骤_vue-cli 封装插件-CSDN博客 参考文章二: npm发布vue插件步骤、组件、package、adduser、publish、getElementsByClassName、important、export、default、target、dest_export default…

【开源】SpringBoot框架开发免税店商城管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2 研究方法 三、系统展示四、核心代码4.1 查询免税种类4.2 查询物品档案4.3 新增顾客4.4 新增消费记录4.5 审核免税 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的免税店商城管理系…

day-18 轮转数组

时间复杂度为O&#xff08;n&#xff09; code: class Solution {public void rotate(int[] nums, int k) {int nnums.length;kk%n;int arr[]new int[n];for(int i0;i<n;i){arr[(ik)%n]nums[i];}for(int i0;i<n;i){nums[i]arr[i];}} }参考答案 进行三次翻转 空间复杂度O…

让开源浏览器Chromium正常显示中文

什么是 Chromium &#xff1f; Chromium 是一个开源浏览器项目&#xff0c;旨在为所有用户构建一种更安全、更快、更稳定的网络体验方式。 和老苏之前介绍的 Firefox 的作用是一样的 文章传送门&#xff1a;给群晖安装firefox浏览器 因为是基于 vnc 的应用&#xff0c;感觉资源…

管理交换机

文章目录 本地管理交换机物理交换机如何本地管理ensp上的虚拟交换机如何本地管理认证模式的三种方式 远程管理交换机配置通过Telnet登录设备配置通过STelnet登录设备 --推荐的方式检查配置结果使用Cloud管理多个交换机时 华为官网配置信息 本地管理交换机 当交换机首次使用时&…

强化学习工具箱(Matlab)

1、Get Started 1.1、MDP环境下训练强化学习智能体 MDP环境如下图 每个圆圈代表一个状态每个状态都有上或下的选择智能体从状态 1 开始智能体接收的奖励值为图中状态转移的值训练目标是最大化累计奖励 &#xff08;1&#xff09;创建 MDP 环境 创建一个具有 8 个状态和 2 …

STM32FreeRTOS任务通知(STM32cube高效开发)

文章目录 一、任务通知(一&#xff09;任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify&#xff08;&#xff09;发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR&#xff08;&#xff09;发送通知函数ISR版本3、x…

Compose UI 之 Small TopAppBar

Small 类型 TopAppBar AppBar 主要由2类&#xff0c;顶部 AppBar 和底部 AppBar。 顶部 AppBar&#xff1a;主要包含了标题&#xff0c;action菜单&#xff0c;导航菜单。底部 AppBar&#xff1a;典型地包含主要导航项。 顶部 AppBar 顶部 AppBar 包含了 4 中类型&#xff…

FREERTOS DAY3

作业&#xff1a;1.总结任务的调度算法&#xff0c;把实现代码再写一下&#xff0c; FreeRTOS中默认的调度算法是 抢占式调度时间片轮转 1.抢占式调度&#xff1a;任务优先级高的可以打断任务优先级低的执行&#xff08;适用于不同优先级&#xff09; 2.时间片轮转&#xff…

低密度奇偶校验码LDPC(九)——QC-LDPC译码器FPGA全并行设计

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

day59 线程

创建线程的第二种方式 实现接口Runnable 重写run方法 创建线程的第三种方式 java.util.concurrent下的Callable重写call()方法 java.util.concurrent.FutureTask 创建线程类对象 获取返回值 线程的四种生命周期 线程的优先级1-10 default为5&#xff0c;优先级越高&#xff0c…

关于安科瑞ASD 开关柜综合测控装置的介绍-安科瑞 蒋静

1 概述 ASD 系列开关柜综合测控装置用于 3~35kV 户内开关柜&#xff0c;适用于中置柜、手车柜、固定柜、环 网柜等多种开关柜。具有一次回路模拟图及开关状态指示&#xff0c;高压带电显示及核相&#xff0c;自动温湿度控制&#xff0c;加热回路故障告警&#xff0c;分合闸…

弹性布局(下),过渡

弹性布局 1.当子元素在主轴方向的长度和大于父元素的情况 子元素在父元素中放不下是否换行&#xff1f; flex-warp&#xff1a; 默认值&#xff1a; nowrap 不换行&#xff0c;压缩子元素的长度&#xff0c;最常用 可选值&#xff1a; wrap 换行 当子元素被压缩时&#xff0…