news 2026/4/15 15:24:21

`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/4/16 12:44:22

7.4 性能度量指标:准确率、精确率、召回率、F1分数、AUC-ROC

7.4 性能度量指标:准确率、精确率、召回率、F1分数、AUC-ROC 模型评估不仅需要一个独立的测试集,更需要选择恰当的度量指标来量化其性能。对于分类任务,单一指标(如准确率)往往无法全面反映模型的行为特性,尤其是在数据分布不平衡或不同错误类型的代价差异悬殊的场景下。…

作者头像 李华
网站建设 2026/4/16 10:17:44

ES6 及以上版本的新增特性解析

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

作者头像 李华
网站建设 2026/4/16 10:49:28

无人机巡检之智慧海上搜救识别数据集 无人机海上救援识别 海上船只识别 海上浮标数据集 摩托艇识别数据集 救生设备识别 游泳者识别10311期

数据集说明文档数据集核心信息表信息类别具体内容数据集类别包含 5 类目标,分别为 boat(船只)、buoy(浮标)、jetski(摩托艇)、life_saving_appliances(救生设备)、swimme…

作者头像 李华
网站建设 2026/4/16 12:38:55

西芒杜项目首船铁矿石成功发运

新华社北京12月5日电(记者王悦阳)记者日前从有关企业获悉,西芒杜项目首船铁矿石于12月3日成功发运,标志着这座世界级铁矿正式打通“矿山—铁路—港口—海运”全产业链通道。 西芒杜铁矿位于几内亚东南部,是世界级大型优…

作者头像 李华
网站建设 2026/4/16 12:23:22

Java SpringBoot+Vue3+MyBatis 手机销售网站系统源码|前后端分离+MySQL数据库

摘要 随着电子商务的快速发展,手机销售行业逐渐成为线上消费的重要领域。消费者对便捷、高效的购物体验需求日益增长,传统的单机版销售系统已无法满足现代用户的需求。基于前后端分离架构的手机销售网站系统能够提供更灵活、可扩展的解决方案&#xff0c…

作者头像 李华