前端JavaScript篇之map和Object的区别、map和weakMap的区别

目录

  • map和Object的区别
  • map和weakMap的区别


map和Object的区别

  • Object是JavaScript的内置对象,用于存储键值对。
  • Object的键必须是字符串或符号,值可以是任意类型。
  • Map是ES6引入的新数据结构,用于存储键值对。
  • Map的键可以是任意类型,值也可以是任意类型。

Object是JavaScript中的内置对象,用于存储键值对(属性和属性值)的集合。它是一种非常常见和灵活的数据结构,可以通过点符号或方括号来访问和修改属性。

Map是ES6引入的新数据结构,也用于存储键值对的集合。与Object不同的是,Map的键可以是任意数据类型,而不仅限于字符串或符号。Map提供了更多的方法来操作和遍历键值对,例如setgethasdelete

// 使用Object存储键值对
const obj = {key1: 'value1',key2: 'value2',key3: 'value3'
}console.log(obj.key1) // 输出:"value1"// 使用Map存储键值对
const map = new Map()
map.set('key1', 'value1')
map.set('key2', 'value2')
map.set('key3', 'value3')console.log(map.get('key1')) // 输出:"value1"

请添加图片描述

在上述例子中,我们首先使用Object存储了一组键值对,其中键为字符串,值为字符串。我们可以使用点符号来访问对象的属性,例如obj.key1返回值为"value1"。

接下来,我们使用Map存储了相同的键值对。使用new Map()创建了一个新的Map对象,然后使用set方法来添加键值对。与Object不同的是,我们可以使用任意类型的键,例如字符串或数字。通过map.get("key1")可以获取到对应的值,返回值为"value1"。

MapObject是两种不同的数据结构,用于存储键值对。它们之间有一些区别和特点:

  1. 键的类型:Map的键可以是任意类型,包括对象、函数、基本类型等;而Object的键只能是字符串或符号。

  2. 键值对的顺序:Map中的键值对是有序的,即按照插入顺序进行迭代;而Object中的键值对是无序的,迭代顺序不确定。

  3. 键值对的个数:Map中的键值对个数可以通过size属性获取;而Object的键值对个数需要手动计算。

  4. 迭代方式:Map可以直接使用for...of循环进行迭代,或者使用forEach方法;而Object需要先获取键的数组,然后再进行迭代。

  5. 键的唯一性:Map中的键是唯一的,不会存在重复的键;而Object中如果使用相同的键进行多次赋值,后面的值会覆盖前面的值。

  6. 性能:在频繁增删键值对的场景下,Map的性能通常会更好,而在静态数据的场景下,Object的性能可能更好。

// 使用Map存储键值对
const map = new Map()
map.set('key1', 'value1')
map.set('key2', 'value2')
map.set('key3', 'value3')console.log(map.size) // 输出:3// 使用Object存储键值对
const obj = {key1: 'value1',key2: 'value2',key3: 'value3'
}let count = 0
for (let key in obj) {if (obj.hasOwnProperty(key)) {count++}
}console.log(count) // 输出:3

请添加图片描述
在上述示例中,我们使用MapObject分别存储了相同的键值对。通过size属性可以获取Map中键值对的个数,通过手动计算可以获取Object中键值对的个数,都为3。

map和weakMap的区别

当涉及到存储键值对的时候,JavaScript提供了两种不同的数据结构:MapWeakMap。它们都有自己的特点和用途。

Map

  • Map是一个有序的键值对集合,其中的键可以是任何类型,包括对象、函数、基本类型等。
  • Map中的键值对是通过set方法添加的,通过get方法获取对应的值。
  • Map提供了size属性来获取键值对的个数。
  • Map可以使用has方法来检查指定的键是否存在。
  • Map可以使用delete方法来删除指定的键值对。
  • Map可以使用clear方法来清空所有的键值对。
  • Map可以使用forEach方法或者for...of循环来迭代键值对。

WeakMap

  • WeakMap也是一个键值对集合,但是它的键必须是对象。
  • WeakMap中的键值对是通过set方法添加的,通过get方法获取对应的值。
  • WeakMap没有提供size属性,也没有提供直接的迭代方法。
  • WeakMap的键是弱引用的,如果键没有被其他对象引用,垃圾回收时会自动删除对应的键值对。
  • WeakMap没有提供类似hasdeleteclear等方法,因为这些方法可能会干扰垃圾回收的机制。

下面是一个使用MapWeakMap的示例:

// 使用Map存储键值对
const map = new Map()
const key1 = { name: 'John' }
const key2 = { name: 'Jane' }map.set(key1, 'value1')
map.set(key2, 'value2')console.log(map.get(key1)) // 输出:"value1"
console.log(map.size) // 输出:2
console.log(map.has(key2)) // 输出:truemap.delete(key1)
console.log(map.size) // 输出:1map.clear()
console.log(map.size) // 输出:0// 使用WeakMap存储键值对
const weakMap = new WeakMap()
const weakKey1 = { name: 'John' }
const weakKey2 = { name: 'Jane' }weakMap.set(weakKey1, 'value1')
weakMap.set(weakKey2, 'value2')console.log(weakMap.get(weakKey1)) // 输出:"value1"weakKey1.name = 'Mike'
console.log(weakMap.get(weakKey1)) // 输出:"value1",键对象属性修改不会导致键值对的删除

请添加图片描述

在上述示例中,我们使用MapWeakMap分别存储了相同的键值对。通过set方法设置键值对,通过get方法获取值。

对于Map,我们可以使用任意类型的键,例如对象key1key2,并通过set方法设置键值对,通过get方法获取值。我们还展示了size属性、has方法、delete方法和clear方法的用法。

对于WeakMap,我们同样可以使用对象作为键,例如weakKey1weakKey2。通过set方法设置键值对,通过get方法获取值。需要注意的是,如果键没有被其他对象引用,垃圾回收时会自动删除对应的键值对。键被修改后,对应的键值对被自动删除。

MapWeakMap是两种不同的数据结构,用于存储键值对。它们之间有一些区别和特点:

  1. 键的引用类型:Map的键可以是任意类型,包括对象、函数、基本类型等;而WeakMap的键必须是对象。

  2. 引用关系:Map中的键值对存在强引用关系,即使键没有被其他对象引用,也不会被垃圾回收;而WeakMap中的键值对存在弱引用关系,如果键没有被其他对象引用,垃圾回收时会自动删除对应的键值对。

  3. 迭代方式:Map可以直接使用for...of循环进行迭代,或者使用forEach方法;而WeakMap没有提供直接的迭代方法。

  4. 键的唯一性:Map中的键是唯一的,不会存在重复的键;而WeakMap中的键是弱引用,不同的对象可以拥有相同的键。

  5. 性能:WeakMap在某些场景下的性能可能会更好,因为它的键值对可以被垃圾回收,不会造成内存泄漏。

// 使用Map存储键值对
const map = new Map()
const key1 = { name: 'John' }
const key2 = { name: 'Jane' }map.set(key1, 'value1')
map.set(key2, 'value2')console.log(map.get(key1)) // 输出:"value1"// 使用WeakMap存储键值对
const weakMap = new WeakMap()
const weakKey1 = { name: 'John' }
const weakKey2 = { name: 'Jane' }weakMap.set(weakKey1, 'value1')
weakMap.set(weakKey2, 'value2')console.log(weakMap.get(weakKey1)) // 输出:"value1"

在上述示例中,我们分别使用MapWeakMap存储了相同的键值对。通过键获取对应的值,可以发现它们的使用方式是相似的。

对于Map,我们可以使用任意类型的键,例如对象key1key2,并通过set方法设置键值对,通过get方法获取值。

对于WeakMap,我们同样可以使用对象作为键,例如weakKey1weakKey2。通过set方法设置键值对,通过get方法获取值。需要注意的是,如果键没有被其他对象引用,垃圾回收时会自动删除对应的键值对。

这就是MapWeakMap的基本区别和用法。Map适用于需要存储键值对且不需要自动删除的场景;而WeakMap适用于需要存储键值对且希望自动删除的场景。

持续学习总结记录中,回顾一下上面的内容:
MapObject 都是 JavaScript 中用于存储键值对的数据结构,但它们之间有一些区别。Object 的键必须是字符串或符号,而 Map 的键可以是任何类型,包括对象和函数。Map 中的键值对是有序的,而且可以通过 size 属性获取 Map 的大小。WeakMap 只接受对象作为键,并且这些对象是弱引用的,它的值可以是任何类型。与 Map 不同的是,WeakMap 中的键值对不是可枚举的,也不能通过 size 属性获取 WeakMap 的大小。在处理大量数据时,Map 的性能比 Object 更好,而 WeakMap 的性能比 Map 更好。

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

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

相关文章

C++ 日期类的实现

目录 前言 日期类中的成员函数和成员变量 日期类中成员函数的详解和实现 1.天数前后的判断 2.天数加减的实现 3.前置 && 后置 4.计算天数差值 前言 日期类的实现将综合前面所学的(类的6个默认成员函数),进一步理解和掌握类的…

COX预测模型过程中,我踩过的那些雷

R语言做!初学者先进来看看!!! SCI冲 COX分析:做临床信息与预后相关的COX分析大致都会分为两个步骤,先做单因素COX回归分析,再根据P值挑选有意义的变量,最终纳入COX多因素回归模型中&…

20240202在WIN10下部署faster-whisper

20240202在WIN10下部署faster-whisper 2024/2/2 12:15 前提条件,可以通过技术手段上外网!^_ 首先你要有一张NVIDIA的显卡,比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡!】800¥ 2、请正确安装好NVIDIA最…

SpringBoot实战项目第一天

环境搭建 后端部分需要准备: sql数据库 创建SpringBoot工程,引入对应的依赖(web\mybatis\mysql驱动) 配置文件application.yml中引入mybatis的配置信息 创建包结构,并准备实体类 完成今日开发后项目部分内容如下图示 用户注册于登录部分…

[BUUCTF]-PWN:mrctf2020_easy_equation解析

查看保护 再看ida 很明了,题目就是让我们用格式化字符串漏洞修改judge的值(可以用python脚本进行计算,最终算出来得2)使等式成立,然后getshell。 虽然操作比较简单,但我还是列出了几种方法 解法一&#x…

uni-app移动端图片预览组件 movable-area 、movable-view (支持缩放,拖动效果、替换部分代码图片可直接使用)

UniApp图片预览组件 利用uni-app官方<movable-area>、<movable-view>内置视图组件 配合 uView 组件的u-popup 弹框组件共同实现封装的图片预览组件&#xff0c;支持手指缩放、拖动效果&#xff0c;替换代码中部分图片后 可以直接使用。 效果图&#xff1a; 组件代码…

【数据结构与算法】——单链表的原理及C语言实现

数据结构与算法——链表原理及C语言实现 链表的原理链表的基本属性设计创建一个空链表链表的遍历&#xff08;显示数据&#xff09;释放链表内存空间 链表的基本操作设计&#xff08;增删改查&#xff09;链表插入节点链表删除节点链表查找节点增删改查测试程序 链表的复杂操作…

Vulnhub billu b0x

0x01 环境搭建 1. 从官方下载靶机环境&#xff0c;解压到本地&#xff0c;双击OVF文件直接导入到vmware虚拟机里面。2. 将虚拟机的网络适配器调成NAT模式&#xff0c;然后开机即可进行操作了。 0x02 主机发现 nmap -sn 192.168.2.0/24 成功获取靶机IP为192.168.2.129。 0x0…

本次安装Visual Studio 所用的安装程序不完整。请重新运行VisualStudio安装程序以解决此问题

今天点开VS的时候遇到了这个问题 因为昨天升级到一半电脑关机了&#xff0c;今天打开软件遇到如下错误&#xff0c; 解决办法很简单&#xff0c;找到安装目录进入Installer文件夹 我的目录在C:\Program Files (x86)\Microsoft Visual Studio\Installer 找到vs_installer.exe…

【python】python爱心代码

一、实现效果&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 二、准备工作 &#xff08;1)、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现…

C#写个小工具,把多个word文档进行合并成一个word文档

先要安装包 帮助类WordDocumentMerger&#xff0c;用于处理word合并功能 using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Word; using System.Reflection; using System.IO; using System.Diagnostics;namespace WordH…

分别用JavaScript,Java,PHP,C++实现桶排序的算法(附带源码)

桶排序是计数排序的升级版。它利用了函数的映射关系&#xff0c;高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效&#xff0c;我们需要做到这两点&#xff1a; 在额外空间充足的情况下&#xff0c;尽量增大桶的数量使用的映射函数能够将输入的 N 个数据均匀的分…

【C语言】字符串函数介绍

目录 前言&#xff1a; 1. strlen 函数 函数介绍 strlen 函数的使用 strlen 函数的模拟实现 2. strcpy 函数 函数介绍 strcpy 函数的使用 strcpy 函数的模拟实现 3. strcat 函数 函数介绍 strcat 函数的使用 strcat 函数的模拟实现 4. strcmp 函数 函数介绍 st…

4K Video Downloader forMac/win:畅享高清视频下载的终极利器!

在如今的数字时代&#xff0c;高清视频已经成为人们生活中不可或缺的一部分。无论是观看精彩的电影、音乐视频&#xff0c;还是学习教育类的在线课程&#xff0c;我们都希望能够以最清晰流畅的方式来欣赏。而为了满足这一需求&#xff0c;我们需要一款功能强大的高清视频下载软…

工业平板电脑定制_三防平板电脑安卓主板厂家

工业平板电脑具有IP68级三防品质&#xff0c;采用高强度工业材质制造&#xff0c;结构稳固坚韧&#xff0c;具备较高的抗冲击和防震能力。隔空减震技术进一步加强了产品的抗冲击和防震动功能。广泛应用于工控、医疗、电信、电力、工业自动化设备、汽车检测、制造业等多个领域&a…

Flink实时数仓同步:快照表实战详解

一、背景 在大数据领域&#xff0c;初始阶段业务数据通常被存储于关系型数据库&#xff0c;如MySQL。然而&#xff0c;为满足日常分析和报表等需求&#xff0c;大数据平台采用多种同步方式&#xff0c;以适应这些业务数据的不同存储需求。这些同步存储方式包括离线仓库和实时仓…

MySQL数据库入门

MySQL数据库概述 1&#xff0c;为什么要使用数据库2&#xff0c;数据库的相关概念3&#xff0c;常见的数据库管理系统4&#xff0c;MySQL介绍5&#xff0c;关系型数据库和非关系型数据库6&#xff0c;关系型数据库的设计规则7&#xff0c;表的关联关系7.1&#xff0c;一对一7.2…

短剧小程序开发:打造高效、便捷的娱乐体验

随着移动互联网的普及和用户需求的多样化&#xff0c;短剧小程序作为一种新型的应用形态&#xff0c;逐渐受到了广大用户的青睐。短剧小程序开发旨在为用户提供一种高效、便捷的娱乐体验&#xff0c;让用户在忙碌的生活中轻松享受到精彩的短剧内容。本文将探讨短剧小程序开发的…

0203-2-输入输出系统

第六章&#xff1a;输入输出系统 I/O系统的功能&#xff0c;模型和接口 I/O系统管理的对象是I/O设备和相应的设备控制器。 I/O系统的基本功能 隐藏物理设备的细节与设备的无关性提高处理机和I/O设备的利用率对I/O设备进行控制确保对设备的正确共享错误处理 I/O软件的层次结…