【JavaScript】Set、Map、WeakSet、WeakMap

✨ 专栏介绍

在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景,并且不断发展演进。在本专栏中,我们将深入学习JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。让我们一起开始JavaScript之旅吧!

在这里插入图片描述

文章目录

    • ✨ 专栏介绍
    • 引言
    • 一、Set
    • 二、Map
    • 三、WeakSet
    • 四、WeakMap
    • 总结
    • 😶 写在结尾
        • `前端设计模式专栏`
        • `Vue专栏`
        • `JavaScript(ES6)专栏`


引言

Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。本文将详细介绍它们的用法、特性、区别、优缺点以及使用场景和注意事项,并给出相应的代码示例。

一、Set

Set是一种类似于数组的数据结构,它存储唯一值,不允许重复。可以使用add()、delete()和has()方法来操作集合中的元素。Set中的值是无序的,可以通过迭代器进行遍历。

优点

  • 快速查找元素是否存在。
  • 去重。

缺点

  • 不能直接通过索引访问元素。

使用场景

去重:可以使用Set来快速去除数组中的重复元素。

判断元素是否存在:可以使用Set来判断某个元素是否存在于集合中。

// 去重
const arr = [1, 2, 3, 3, 4, 5, 5];
const uniqueSet = new Set(arr);
console.log([...uniqueSet]); // [1, 2, 3, 4, 5]
// 判断元素是否存在
const set = new Set([1, 2, 3]);
console.log(set.has(2)); // true
console.log(set.has(4)); // false

二、Map

Map是一种键值对存储数据的数据结构,类似于对象。每个键对应一个值。可以使用set()、get()、delete()和has()等方法来操作键值对。

优点

  • 可以使用任何类型作为键。
  • 提供了丰富的方法来操作键值对。

缺点

  • 相对于对象,Map的性能稍差。

使用场景

存储和查找数据:可以使用Map来存储和查找数据,键值对的形式更加直观和灵活。

// 存储和查找数据
const map = new Map();
map.set('name', 'John');
map.set('age', 30);
console.log(map.get('name')); // John
// 遍历键值对
for (let [key, value] of map) {
 console.log(key + ' = ' + value);
}

在这里插入图片描述

三、WeakSet

WeakSet是一种特殊的Set,它只能存储对象,并且对象是弱引用关联的。WeakSet中存储的对象是弱引用关联的,即如果没有其他引用指向该对象,则该对象会被垃圾回收。WeakSet没有迭代器,不能遍历其中的元素。

优点

  • 不会造成内存泄漏:由于WeakSet中存储的对象是弱引用关联的,不会阻止被引用对象被垃圾回收。

缺点

  • 功能较弱:由于无法遍历和获取大小等限制,功能相对有限。

使用场景

存储临时数据:可以使用WeakSet来存储临时数据,不用担心内存泄漏的问题。

// 存储临时数据
let obj1 = { name: 'John' };
let obj2 = { name: 'Jane' };
const weakSet = new WeakSet([obj1, obj2]);
// 注意:WeakSet没有迭代器,不能遍历其中的元素

四、WeakMap

WeakMap是一种特殊的Map,它只能使用对象作为键,并且键是弱引用关联的。WeakMap中使用的对象作为键是弱引用关联的,即如果没有其他引用指向该对象,则该对象会被垃圾回收。WeakMap没有迭代器,不能遍历其中的键值对。

优点

  • 不会造成内存泄漏:由于WeakMap中使用的对象作为键是弱引用关联的,不会阻止被引用对象被垃圾回收。

缺点

  • 功能较弱:由于无法遍历和获取大小等限制,功能相对有限。

使用场景

存储私有数据:可以使用WeakMap来存储私有数据,只有拥有对应的键才能访问到私有数据。

// 存储私有数据
let privateData = new WeakMap()
class Person {
  constructor(name) {
    privateData.set(this, { name })
  }
  getName() {
    return privateData.get(this).name
  }
}
let person = new Person("John")
console.log(person.getName()) // John
// 注意:WeakMap没有迭代器,不能遍历其中的键值对

总结

通过以上代码示例,我们可以看到Set、Map、WeakSet和WeakMap的用法和特性。

在Set和Map中,如果一个对象被添加到集合中,即使在其他地方不再引用该对象,它仍然会被集合保留,不会被垃圾回收机制回收。这可能导致内存泄漏,特别是在长时间运行的应用程序中。

而在WeakSet和WeakMap中,存储的对象是弱引用关联的。这意味着如果一个对象只有在WeakSet或WeakMap中存在引用,并且没有其他地方引用它,那么该对象将被垃圾回收机制自动回收。这样可以有效地避免内存泄漏问题。

另外,由于弱引用关联的特性,WeakSet和WeakMap没有提供像Set和Map那样的迭代器方法来遍历元素。也没有size属性来获取元素个数。这是为了确保不会干扰垃圾回收机制对对象的处理。

因此,当需要存储临时数据或私有数据,并且希望避免内存泄漏时,使用WeakSet和WeakMap是更合适的选择。它们提供了一种轻量级、安全且不会造成内存泄漏的数据存储方式。


😶 写在结尾

前端设计模式专栏

在这里插入图片描述
设计模式是软件开发中不可或缺的一部分,它们帮助我们解决了许多常见问题,并提供了一种优雅而可靠的方式来构建应用程序。在本专栏中,我们介绍了所有的前端设计模式,包括观察者模式、单例模式、策略模式等等。通过学习这些设计模式,并将其应用于实际项目中,我们可以提高代码的可维护性、可扩展性和可重用性。希望这个专栏能够帮助你在前端开发中更好地应用设计模式,写出高质量的代码。点击订阅前端设计模式专栏

Vue专栏

在这里插入图片描述

Vue.js是一款流行的JavaScript框架,用于构建用户界面。它采用了MVVM(Model-View-ViewModel)的架构模式,通过数据驱动和组件化的方式,使开发者能够更轻松地构建交互性强、可复用的Web应用程序。在这个专栏中,我们将深入探讨Vue.js的核心概念、组件开发、状态管理、路由和性能优化等方面的知识。我们将学习如何使用Vue.js构建响应式的用户界面,并探索其强大的生态系统,如Vue Router和Vuex、Pinia。通过学习这些内容,你将能够成为一名熟练的Vue.js开发者,并能够应用这些知识来构建复杂而高效的Web应用程序。点击订阅Vue专栏

JavaScript(ES6)专栏

在这里插入图片描述

JavaScript是一种广泛应用于网页开发和后端开发的脚本语言。它具有动态性、灵活性和易学性的特点,是构建现代Web应用程序的重要工具之一。在这个专栏中,我们将深入探讨JavaScript语言的基本语法、DOM操作、事件处理、异步编程以及常见算法和数据结构等内容。此外,我们还将介绍ES6(ECMAScript 2015)及其后续版本中引入的新特性,如箭头函数、模块化、解构赋值等。通过学习这些内容,你将能够成为一名熟练的JavaScript开发者,并能够应用这些知识来构建出高质量和可维护的Web应用程序。点击订阅JavaScript(ES6)专栏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云计算:OpenStack 配置二层物理网卡为三层桥的接口

目录 一、理论 1.OpenStack 二、实验 1. Linux系统修改网卡 2.OpenStack 配置二层物理网卡为三层桥的接口 一、理论 1.OpenStack (1)概念 OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空…

【Java 中锁的种类】

文章目录 一、公平锁和非公平锁二、可重入锁(递归锁)三、自旋锁四、独占锁(写锁)/共享锁(读锁)/互斥锁 提示:以下是本篇文章正文内容,下面案例可供参考 一、公平锁和非公平锁 遵守先来后到的是公平锁,不遵守的是非公…

Jmeter 性能 —— 监控服务器!

Jmeter 监控Linux需要三个文件 JMeterPlugins-Extras.jar (包:JMeterPlugins-Extras-1.4.0.zip)JMeterPlugins-Standard.jar (包:JMeterPlugins-Standard-1.4.0.zip)ServerAgent-2.2.3.zip 1、Jemter 安装插件 在插件管理中心的搜索Servers Performa…

基于ChatGpt,Java,SpringBoot,Vue,Milvus向量数据库的定制化聊天Web demo

customized chat GitHub - bigcyy/customized-chatgpt: 基于ChatGpt,Java,SpringBoot,Vue,Milvus向量数据库的定制化聊天Web demo 简介 基于ChatGpt,Java,SpringBoot,Vue,Milvus向…

【MyBatis-Plus】进阶之乐观锁、悲观锁逻辑删除分页和查询构造器的使用

目录 一、乐观锁、悲观锁 1、什么是乐观锁和悲观锁 ①乐观锁(Optimistic Locking): ②悲观锁(Pessimistic Locking): ③实现方式 2、乐观锁和悲观锁的区别 ①乐观锁(Optimistic Locking) ②悲观锁&…

【头歌实训】PySpark Streaming 数据源

文章目录 第1关:MySQL 数据源任务描述相关知识PySpark JDBC 概述PySpark JDBCPySpark Streaming JDBC 编程要求测试说明答案代码 第2关:Kafka 数据源任务描述相关知识Kafka 概述Kafka 使用基础PySpark Streaming Kafka 编程要求测试说明答案代码 第1关&a…

亿赛通电子文档安全管理系统 linkfilterservice 未授权漏洞

产品简介 亿赛通电子文档安全管理系统,(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资…

在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo

Spring Cloud系列断更了有一段时间了,这段时间最近都在忙着项目上的事,天天修复bug以及调整需求,反正各种操劳,了解业务需求,然后开发相关功能,很久都没碰Spring Cloud系列的相关文章了,最近回头…

ASP.Net实现新闻添加查询(三层架构,含照片)

目录 演示功能: 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 ​编辑 点击Button添加 步骤: 1、建文件 ​编辑 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper(对数据库进行操作…

Win10电脑蓝牙默认音量100的设置教程

在Win10电脑操作过程中,用户想设置连接蓝牙后音量默认是100,但不知道具体的设置操作步骤。这时候用户需要打开Win10系统上的注册表,点击修改注册表来完成这一设置,下面就是Win10电脑蓝牙默认音量100的设置教程介绍,帮助…

【网络安全 | 指纹识别工具】WhatWeb使用详析

前言 WhatWeb 是一款用于识别 Web 应用程序和 Web 服务器的开源工具。它可以识别网站使用的编程语言、Web 框架、Web 服务器软件、Web 应用程序等信息,从而帮助安全测试人员快速了解目标网站的技术特征,发现可能存在的漏洞。 本文将对 WhatWeb 的使用方法…

使用Rust发送邮件

SMTP协议与MIME协议 SMTP(简单邮件传输协议,Simple Mail Transfer Protocol)是一种用于发送和接收电子邮件的互联网标准通信协议。它定义了电子邮件服务器如何相互发送、接收和中继邮件。SMTP 通常用于发送邮件,而邮件的接收通常由 POP&#…

在wps里导入Mathtype、改变字体

1 在wps里导入Mathtype 开发工具--加载项 2. 在“模板和加载项”窗口中再点击“添加” 3.找到mathtype安装路径下面的“OfficeSupprot”,这时会看到有“32”和“64”两个文件夹,分别对应WPS软件的系统(任务管理器可以直接查看wps版本&#x…

three.js实现3D汽车展厅效果展示

项目搭建 本案例还是借助框架书写three项目,借用vite构建工具搭建vue项目,搭建完成之后,用编辑器打开该项目,在终端执行 npm i 安装一下依赖,安装完成之后终端在安装 npm i three 即可。 因为我搭建的是vue3项目&…

理解 Go Mod Init

初始化Go模块和管理依赖的全面指南 go mod init 是Go编程语言(通常称为Golang)中用于初始化新Go模块的命令。在Go中,一个模块是一组相关的Go包,它们作为一个单元一起进行版本控制。通常,在项目目录的根目录下使用 go m…

NLP论文阅读记录 - 01 | 2021 神经抽象摘要方法及摘要事实一致性综述

文章目录 前言0、论文摘要一、Introduction二.背景2.1自动总结任务2.2 数据集DUC-2004Gigaword [Graff et al., 2003, Napoles et al., 2012]CNN/DailyMail [Nallapati 等人,2016]XSum [Narayan 等人,2018] 2.3 摘要系统的评估2.3.1 Rouge [Lin, 2004] 三…

用编程解决习题【计算机图像处理】

用编程解决习题【计算机图像处理】 前言版权第三章 03采样量化与像素间关系作业编程 第六章 06图像的直方图变换作业编程 第七章 07图像的噪声抑制作业编程 第十章 10二值图像的分析作业编程 最后 前言 2023-12-27 21:11:27 以下内容源自《【计算机图像处理】》 仅供学习交流…

CSS3用户界面弹性盒子

CSS3用户界面 resize 该CSS3属性用于定义元素是否应该调整大小,如果需要调整大小,那么以哪个轴进行调整。 语法:resize:both | horizontal | none | vertical 注意:该属性仅应用在overflow值而不是visible的元素上。通常而言&am…

《国货之光》-粗粮八宝粉

国潮正当时,好物当自强。赋能国货品牌,打造行业爆品。今天为大家带来的国货好物是老磨坊纯杂粮八宝粉 小时候,经常听妈妈说,要多吃杂粮,对身体好。然后每天不重样的给我做杂粮饭菜。不知道大家有没有和我相同的经历。…

Windows搭建FTP服务器教学以及计算机端口介绍

目录 一. FTP服务器介绍 FTP服务器是什么意思? 二.Windows Service 2012 搭建FTP服务器 1.开启防火墙 2.创建组 ​编辑3.创建用户 4.用户绑定组 5.安装ftp服务器 ​编辑6.配置ftp服务器 7.配置ftp文件夹的权限 8.连接测试 三.计算机端口介绍 什么是网络…