news 2026/5/8 11:28:45

`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/5/5 19:46:15

7.3 模型评估方法论:训练集、验证集、测试集划分策略

7.3 模型评估方法论:训练集、验证集、测试集划分策略 模型评估是机器学习工作流程中的关键环节,其目的是客观、准确地估计一个模型在未知数据上的泛化性能。一个严谨的评估方法论的核心在于数据集的划分策略,其根本目标是模拟模型部署后面对全新数据时的表现,并防止因信息…

作者头像 李华
网站建设 2026/5/1 7:08:08

【毕业设计】SpringBoot+Vue+MySQL 手机销售网站平台源码+数据库+论文+部署文档

摘要 随着移动互联网的普及和电子商务的快速发展,手机销售行业正经历着前所未有的变革。传统的线下销售模式已无法满足消费者对便捷、高效购物体验的需求,线上手机销售平台逐渐成为主流。手机作为现代人生活中不可或缺的智能设备,其市场需求持…

作者头像 李华
网站建设 2026/5/2 11:01:10

LLM - Prompt Engineering 构建工业级 LLM Agent 的六维结构化框架

文章目录Pre引言:从 Chat 到 Engineering一、 Role(角色):不仅是身份,更是领域锚定1.1 明确专业领域 (Domain Specificity)1.2 单一职责原则 (SRP)1.3 避免角色冲突二、 Context(上下文)&#x…

作者头像 李华
网站建设 2026/5/3 17:11:31

【2025最新】基于SpringBoot+Vue的美食信息推荐系统管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的快速发展和人们生活水平的不断提高,美食文化逐渐成为人们日常生活中不可或缺的一部分。美食推荐系统应运而生,旨在为用户提供个性化的美食信息推荐,帮助用户更高效地发现符合自身口味和需求的餐饮选择。传统的美食信息…

作者头像 李华