news 2026/9/20 4:54:03

`Set`、`Map`、`WeakSet` 和 `WeakMap` 的区别与使用场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
`Set`、`Map`、`WeakSet` 和 `WeakMap` 的区别与使用场景

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

在 JavaScript 中,SetMapWeakSetWeakMap是四种重要的数据结构,它们都用于存储键值对或唯一值。虽然它们在某些方面有相似之处,但在内部实现、使用场景和特性上存在显著差异。本文将详细介绍这四种数据结构的区别,并探讨它们各自的最佳使用场景。

一、Set

(一)定义与特性

Set是一个简单的集合数据结构,用于存储唯一的值。它不允许重复的值,因此每个值在集合中只能出现一次。

(二)使用场景

Set适用于以下场景:

  1. 去重:从数组中去除重复值。
  2. 成员检查:快速检查某个值是否存在于集合中。
  3. 集合操作:执行集合的并集、交集和差集操作。

(三)示例代码

constmySet=newSet([1,2,3,3,4]);console.log(mySet);// Set(4) {1, 2, 3, 4}mySet.add(5);console.log(mySet.has(5));// truemySet.delete(3);console.log(mySet);// Set(4) {1, 2, 4, 5}

二、Map

(一)定义与特性

Map是一个键值对的集合,允许使用任意类型的值作为键或值。

(二)使用场景

Map适用于以下场景:

  1. 键值对存储:存储键值对,键可以是任意类型(如对象、函数等)。
  2. 动态属性:为对象动态添加属性,而不需要修改对象本身。
  3. 高效查找:快速查找、插入和删除键值对。

(三)示例代码

constmyMap=newMap();myMap.set("key1","value1");myMap.set({key:"objKey"},"value2");console.log(myMap.get("key1"));// value1console.log(myMap.has({key:"objKey"}));// false(对象引用不同)

三、WeakSet

(一)定义与特性

WeakSet是一个只存储对象引用的集合,这些引用是“弱引用”,不会阻止垃圾回收器自动回收对象。

(二)使用场景

WeakSet适用于以下场景:

  1. 私有属性:为对象添加私有属性,而不影响对象的垃圾回收。
  2. 弱引用管理:管理对象的弱引用,避免内存泄漏。

(三)示例代码

constmyWeakSet=newWeakSet();constobj1={};constobj2={};myWeakSet.add(obj1);console.log(myWeakSet.has(obj1));// trueobj1=null;// obj1 被垃圾回收console.log(myWeakSet.has(obj1));// false(obj1 已被回收)

四、WeakMap

(一)定义与特性

WeakMap是一个键值对的集合,其中键必须是对象,值可以是任意类型。与Map不同,WeakMap的键是弱引用,不会阻止垃圾回收器自动回收对象。

(二)使用场景

WeakMap适用于以下场景:

  1. 私有属性:为对象添加私有属性,而不影响对象的垃圾回收。
  2. 缓存:为对象创建缓存,避免内存泄漏。

(三)示例代码

constmyWeakMap=newWeakMap();constobj1={};constobj2={};myWeakMap.set(obj1,"value1");console.log(myWeakMap.get(obj1));// value1obj1=null;// obj1 被垃圾回收console.log(myWeakMap.get(obj1));// undefined(obj1 已被回收)

五、SetMapWeakSetWeakMap的区别

(一)存储类型

(二)垃圾回收

(三)迭代能力

(四)使用场景

六、总结

SetMapWeakSetWeakMap是 JavaScript 中四种重要的数据结构,它们各自有不同的特性和使用场景。SetMap是常规的数据结构,适用于大多数场景;而WeakSetWeakMap则提供了弱引用机制,适用于需要避免内存泄漏的场景。

在实际开发中,开发者需要根据具体需求选择合适的数据结构。例如,如果需要存储键值对并支持迭代,可以选择Map;如果需要为对象添加私有属性而不影响垃圾回收,可以选择WeakMap。通过合理使用这些数据结构,可以编写出更高效、更可靠的代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 7:33:21

【2025最新】基于SpringBoot+Vue的企业项目管理系统管理系统源码+MyBatis+MySQL

摘要 随着信息技术的快速发展,企业对高效、智能的项目管理系统的需求日益增长。传统项目管理方式依赖人工操作,存在效率低下、数据易丢失、协同困难等问题,难以满足现代企业对实时性和精准性的要求。尤其是在多部门协作、资源分配和进度跟踪方…

作者头像 李华
网站建设 2026/9/19 3:25:40

企业级大学生考勤系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着高校信息化建设的不断推进,传统的大学生考勤管理方式逐渐暴露出效率低下、数据统计不准确、人工操作繁琐等问题。尤其是在大规模班级或复杂课程安排的情况下,手动记录考勤数据容易出错,且难以实现实时动态管理。为了解决这些问题&am…

作者头像 李华
网站建设 2026/9/20 7:39:35

【2025最新】基于SpringBoot+Vue的物资综合管理系统管理系统源码+MyBatis+MySQL

摘要 随着企业规模的扩大和信息化程度的提高,物资管理成为企业运营中不可或缺的重要环节。传统物资管理方式依赖人工操作,效率低下且容易出错,难以满足现代企业对物资高效调配、实时监控和数据分析的需求。物资综合管理系统的开发旨在解决这些…

作者头像 李华
网站建设 2026/9/19 1:26:42

数学梗图数据集分析报告:999张高质量数学主题幽默图片资源

数学梗图数据集分析报告 引言与背景 在当代数字内容生态中,视觉化的教育资源扮演着越来越重要的角色。数学作为基础学科,常常被视为抽象和难以理解的领域,而通过幽默的视觉表达方式可以有效降低学习门槛,激发学习兴趣。本数据集包…

作者头像 李华