js系列-Map和WeakMap

浅析 Map 和 WeakMap 区别以及使用场景 希望这一篇文章能让你对 Map 有更好的理解,或者能够帮你理解 Map 和 WeakMap 这篇文章会先从Map再到WeakMap 一、为什么是 Map ? 1. 传统对象结构 Map本质上是一个键值对的集合。和传统对象结构相比,传统的对象只能用字符串作为键名,这就在使用上造成了很大的限制了。这也是新增 Map 的原因之一。 const data = {}; // elemen.. 阅读详情

带着问题学习:

1.什么是Map

2.es6为什么会出现Map,解决什么问题

2.如何定义Map

回答:

1.Map是一组键值对结构的数据集合

2.出现Map是为了解决Object的键key必须是字符串问题,Map的键可以为Number,对象Object,数组Array,方法Function等。Map还有个优点是具有极快的查找速度。

3.定义(两种定义方式):

    //定义空Map:
    let map = new Map();
    map.set('Tom',22);
    map.set('Jerry',20);
    console.log(map);//Map(2) {"Tom" => 22, "Jerry" => 20}
    //定义时直接初始化(数据为二维数组)
    let map2 = new Map([['Tom',22],['Jerry',20]]);
    console.log(map2);//Map(2) {"Tom" => 22, "Jerry" => 20}

操作Map的方法:

1.添加元素set(上面定义时我们已经用到了)

 //键key可以是对象,function,字符串,数字
    let myMap = new Map();
    let keyObj = {};
    let keyFunc = function() {};
    let keyString = 'string';
    // 添加键
    myMap.set(keyString, "和键'string'关联的值");
    myMap.set(keyObj, "和键keyObj关联的值");
    myMap.set(keyFunc, "和键keyFunc关联的值");
    myMap.set(1, "和键数字1关联的值");
    console.log(myMap);//Map(4) {"string" => "和键'string'关联的值", {…} => "和键keyObj关联的值", ƒ => "和键keyFunc关联的值", 1 => "和键数字1关联的值"}

2.获取元素get

    console.log(myMap.get(keyString));//"和键'string'关联的值"
    console.log(myMap.get(keyObj));//"和键keyObj关联的值"
    console.log(myMap.get(keyFunc));//"和键keyFunc关联的值"
    console.log(myMap.get(1));//"和键数字1关联的值"

3.删除元素delete

    let map = new Map([['Tom',22],['Jerry',20]]);
    console.log(map);//Map(2) {"Tom" => 22, "Jerry" => 20}
    map.delete('Tom');//返回值true
    console.log(map);//Map(1) {"Jerry" => 20}

4.清除所有元素clear

     let map = new Map([['Tom',22],['Jerry',20]]);
     console.log(map);//Map(2) {"Tom" => 22, "Jerry" => 20}
     map.clear();//返回值undefined
     console.log(map);//ap(0) {}

5.检测元素是否存在has

    let map = new Map([['Tom',22],['Jerry',20]]);
    console.log(map.has('Tom'));//true

6.遍历数据

使用 keys()/values()/entries() 都可以返回可遍历的迭代对象。(这里也可以看出Map和对象Object相似)

    let map = new Map([['Tom',22],['Jerry',20]]);
    for (const key of map.keys()) {
        console.log(key);//Tom Jerry
    }
    for (const value of map.values()) {
        console.log(value);//22 20
    }
    for (const item of map) {
        console.log(item);//["Tom", 22] ["Jerry", 20]
    }
    for (const item of map.entries()) {
        console.log(item);//["Tom", 22] ["Jerry", 20]
    }
    map.forEach(item=>{
        console.log(item)
    })

7.转数组(数组章节有详细介绍)

我们常常将其他数据类型转换为数组类型,就可以使用数组filter,every,some等强大方法了。

    //过滤年龄小于18岁的人
    let map = new Map([['Tom',22],['Jerry',20],['Ela',16]]);
    console.log(map);//Map(3) {"Tom" => 22, "Jerry" => 20, "Ela" => 16}
    map = new Map([...map].filter(item=>{
        return item[1] > 18
    }));
    console.log(map);//Map(2) {"Tom" => 22, "Jerry" => 20}

WeakMap

对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象Object 类型,而值可以是任意的。

注意几点:

  • 键名必须是对象
  • WeaMap对键名是弱引用的,键值是正常引用
  • 垃圾回收不考虑WeaMap的键名,不会改变引用计数器,键在其他地方不被引用时即删除
  • 因为WeakMap 是弱引用,由于其他地方操作成员可能会不存在,所以不可以进行forEach( )遍历等操作
  • 也是因为弱引用,WeaMap 结构没有keys( ),values( ),entries( )等方法和 size 属性
  • 当键的外部引用删除时,希望自动删除数据时使用 WeakMap

基本操作

下面是WeakSet的常用指令

const wm = new WeakMap();
const arr = ["Tom"];
//添加操作
wm.set(arr, 20);
console.log(wm.has(arr)); //true
//删除操作
wm.delete(arr);
//检索判断
console.log(wm.has(arr)); //false
WeakMap 和 Map 的区别,WeakMap 原理 WeakMap 中,每个键对自己所引用对象的引用都是弱引用,在没有其他引用和该键引用同一对象,这个对象将会被垃圾回收(相应的key则变成无效的),所以,WeakMap 的 key 是不可枚举的。最早最简单的垃圾回收机制,就是给一个占用物理空间的对象附加一个引用计数器,当有其它对象引用这个对象时,这个对象的引用计数加一,反之解除时就减一,当该对象引用计数为 0 时就会被回收。JS 中的垃圾数据都是由垃圾回收(Garbage Collection,缩写为 GC)器自动回收的,不需要手动释放,它是如何做的喃? 阅读详情

相关推荐

Linux下开机异常(fsck exited with status code 4)

Linux下开机异常事情是这样的,本来我呢跑着程序听着歌,结果忽然就死机了,我只能强制关机,再次打开系统的时候,就提示这样fsck from util-linux 2.26.2 /dev/sda10 contains a file system with errors, check forced. /dev/sda10: Inodes that were part of a corrupted pr

芳草碧连天 2万+

JavaScript之WeakMap

weakMap介绍基本API弱键不可迭代键使用弱映射1.私有变量2.DOM节点元数据 ECMAScript 6新增的“弱映射”(WeakMap)是一种新的集合类型,为这门语言带来了增强的键/值对存储机制。WeakMap是Map的“兄弟”类型,其API也是Map的子集。 WeakMap中的“weak”(弱),描述的是JavaScript垃圾回收程序对待“弱映射”中键的方式。 基本API 可以使用new关键字实例化一个空的WeakMap: const wm = new WeakMap(); 弱映射中的键只能是

ALiang 1万+

一文读懂GPU通信互联技术:GPUDirect、NVLink与RDMA

GPUDirect是NVIDIA开发的一项技术,旨在实现GPU与其他设备(如网络接口卡NIC和存储设备)之间的直接通信和数据传输,而无需CPU的参与。传统上,数据在GPU和另一个设备之间传输时,必须通过CPU,这导致潜在的性能瓶颈和延迟增加。GPUDirect技术则通过绕过CPU,直接访问和传输数据,显著提高系统性能。NVLink是NVIDIA开发的一种高速、高带宽的互连技术,用于连接多个GPU之间或GPU与其他设备(如CPU、内存等)之间的通信。

异构算力老群群(在读985计算机博士生)的技术博客 7770

JavaScript 数据类型之Map与WeakMap

ES6数据类型之 Map与WeakMap

klk20001113的博客 2939

大模型-高通qnn基础

提供较低级别、高度可定制的统一API,通过单独的库加速所有AI加速器核心上的AI模型, 可以直接用于针对特定的加速器核心或从流行的运行时(包括Qualcomm Neural Processing SDK、TensorFlow Lite和ONNX运行时)委派工作负载。一个支持异构计算、系统级配置的一体化SDK,旨在将AI工作负载引导到我们平台上的所有加速器核心。为开发人员提供灵活性,包括核心间协作支持和其他高级功能。是一个为训练好的神经网络模型提供高级量化和压缩技术的库。

点滴的岁月 4082

从仿真曲线到电路状态:用Cadence Virtuoso深度剖析CS放大器各个工作区(以电流源负载为例)

本文通过Cadence Virtuoso平台,深入剖析电流源负载CS放大器在不同工作区的表现,从仿真曲线解读电路状态。详细介绍了如何通过Vout-Vin直流扫描曲线判断MOS管工作区域(截止区、饱和区、线性区),并验证理论与仿真的一致性,提升模拟IC设计调试效率。

weixin_30940783的博客 442

js Map对象的用法

第一篇: Map: Map是一组键值对的结构,具有极快的查找速度。 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array: var names = ['Michael', 'Bob', 'Tracy']; var scores = [95, 75, 85]; 给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应...

前端技术的学习整理 16万+

MATLAB实战:纯电动汽车动力性仿真从入门到精通(附完整代码)

本文提供了一份基于MATLAB的纯电动汽车动力性仿真从入门到精通的实战指南。通过理论建模与代码实战相结合,详细讲解了如何构建行驶阻力模型、驱动力平衡方程,并利用MATLAB脚本完整实现了最高车速、加速时间和最大爬坡度三大核心性能指标的仿真计算。文章附有完整代码,帮助工程师快速掌握纯电动汽车动力性仿真的核心技能,为设计与优化提供高效的数字工具。

weixin_29074409的博客 368

js的map方法

简介 Map 是JavaScript中的数据结构,它允许存储【键,值】对,其中任何值都可以用作键或值;Map集合中的键和值可以是任何类型,并且如果使用集合中已存在的键将值添加到Map集合中,新值将替换旧值。 1.map()方法 返回一个新数组,数组中的元素为原始数组调用函数处理后的值,并且按照原始数组元素调用函数处理后的值 ⚠️:map()不会对空数组进行检测,并且不会改变原数组 传参:currentValue:必传。当前元素值 index:可选。当前元素索引值 arr:可选。当前元素属于的数组对象 示例:

叮当的猫猫的博客 16万+

宜搭,高级认证实操2,FaaS连接器指导教程

找到FaasEntry.java将如下代码整体替换,注意引包。如图所示在util下新建EDSUtil.java代码如下。回到连接器界面点击右上角测试-->测试。连接器工厂-->新建FaaS连接器。保存-->前往云IDE开发。返回如图所示代码,部署成功。

2301_80286061的博客 3342

Android实现自动输入文本效果 (附完整源码)

Android实现自动输入文本效果 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 413

JS Map 与 weakMap

本篇文章介绍了 Map 的基本 API 如何使用,并且详细介绍了 weakMap 的特点以及什么是弱引用,通俗易懂、适合新手巩固知识。

weixin_46015333的博客 1529

Coze智能体开发:开始使用扣子

扣子全新升级!它不仅能帮你办公、做视频、写代码,更具备自主任务执行、探索进化等能力,真正从“陪你聊”走向“帮你干活”。

王国平的博客 120

从零开始学_JavaScript_系列(45)——ES6新增数据结构:Map和WeakMap

一句话总结:1、 Map的参照1.1; 2、 WeakMap的是弱化版Map,只有增、查、取、删四个API;

qq20004604的博客 933

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

每天3分钟,重学ES6-ES12系列文章汇总

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情 规划 未来的一周(当然也可能是两周,也可能是一个月),我准备了以下题目。 每篇严格控制字数,写长了也没人看,写短了我还能省点力气。 链接 每天3分钟,重学ES6-ES12(一)字面量的增强 解构 每天3分钟,重学ES6-ES12(二)var,let和const 每天3分钟,重学ES6-ES...

65

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

js内置的一些api

【代码】js内置的一些api。

weixin_43845028的博客 320

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JS中Map和weakMap的区别

简单解释了一下JS中map和weakMap的区别。

qq_49021656的博客 2098

map和weakMap的区别

Map和WeakMap都是 JavaScript 中用于存储键值对的数据结构,但它们在设计目的、行为和使用场景上有一些重要的区别。以下是Map和WeakMap。

大剑师兰特的GIS世界 1686

JavaScript中的Set、Map、WeakSet、WeakMap详解

Set是ES6引入的一种新的数据结构,它允许我们存储任何类型的数据,但每个元素只能出现一次。换句话说,Set中的元素是唯一的,不允许有重复值。Map也是ES6引入的一种新的数据结构,它允许我们存储键值对(key-value pairs)。与普通对象不同,Map的键可以是任意数据类型,包括对象、函数等。WeakSet与Set类似,但它存储的引用是弱引用。这意味着如果WeakSet中引用的某个对象没有其他强引用指向它,垃圾回收机制可能会回收该对象,而不会考虑它是否存在于WeakSet中。

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 2038

Map和WeakMap

​ Map跟Object对象很像,但不同的是,它的key键名的类型不再局限于字符串类型了,它可以是各种类型的值​​​给实例设置一对键值对,返回map实例。​通过属性名获取属性值​获取Map长度​删除指定的键值对 成功true 失败 false​清除所有成员​判断Map结构中是否含有指定的值。如果有,返回true;如果没有,返回fasle。​返回一个键值对的遍历器。​返回键名的遍历器​返回键值的遍历器​遍历。

frdsf123的博客 1605

JavaScript前端面试题——JS 中 Map 和 WeakMap 有什么区别 ?

为了避免有小伙伴和我一样连 map 和 weakmap 是什么都不知道,我在这里详细介绍一下。Map和WeakMap是 ECMAScript 2015(ES6)引入的两种数据结构,用于改进键值对的管理方式。Map:适用于需要保持键值对插入顺序、允许多种数据类型作为键、需要遍历和获取大小的场景。WeakMap:适用于需要将对象作为键并确保这些键不会阻止对象被垃圾回收的场景,通常用于存储对象的元数据。

lbcbjtlhmjq的博客 1350

JavaScript——集合: Map与WeakMap

Map是ES6引入的一种新的集合类型,用于存储键值对(key-value)集合。与传统对象(Object)类似,但具有更强大的功能和灵活性。Map vs Object的主要区别特性MapObject键类型可以是任意类型(字符串、数字、对象、函数等)主要是字符串或Symbol键顺序保留插入顺序ES6之前不保证顺序,ES6之后为插入顺序大小获取直接通过size属性需要手动计算(Object.keys(obj).length)迭代方式可直接迭代。

weixin_63215361的博客 1454

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

Object是JavaScript中的内置对象,用于存储键值对(属性和属性值)的集合。它是一种非常常见和灵活的数据结构,可以通过点符号或方括号来访问和修改属性。 Map是ES6引入的新数据结构,也用于存储键值对的集合。与Object不同的是,Map的键可以是任意数据类型,而不仅限于字符串或符号。Map提供了更多的方法来操作和遍历键值对,例如set、get、has和delete。

星辰迷上大海的博客 1991

javascript中Map和WeakMap的使用

javascript中Map和WeakMap的使用 在开始之前,我们还需要了解一点,Object的键必须是字符串,如果你传给Object的不是字符串类型作为键,Object会自动转化。 一、Map的使用 由于Object只能用字符串作为键,所以ES6中就有了产生了Map,Map的作用就是可以把任何值作为键,也可以将对象作为键。 Map的方法 <script> const map = new Map() // 初始化Map map.set("name","张三").set("age","20"

weixin_47450807的博客 778

WeakMap和WeakSet使用场景

为了弥补这个问题,另外有WeakMap和WeakSet。WeakXXX的特点是:弱引用,存储对象,无序不可遍历,且没有size属性。如果对象除了作为的成员之外没有其他引用,那么它可以被垃圾回收器回收,即使它仍然在中。总结一下,这里提到了三种WeakMap的使用场景:缓存,存储监听事件引用的集合,存储私有属性。另外WeakMap还有存储临时数据、存储和Dom元素关联的数据,管理第三方库对象等其他用法,和WeakSet应用场景很多情况下是互通的,可以两者对比参照。

weixin_49164128的博客 2235

小酌Object、Map和WeakMap

Object 对于普通Object,它的优势在于存、取元素,使用非常方便,可直接用字面量方式创建;而且里面属性值可以是不同类型: let obj={}; obj.name='mxc'; obj.age=18; console.log(obj); 但这不是今天的重点。 对于 Object,删除其中的属性有两种方式:delete 操作符和 =undefined。 delete: delete 会从某个对象上移除指定属性。成功为 true,否则为false: delete obj.age; 但这有几点不足

flying meng的菜鸟居 2046
上一篇: js系列-Set集合和WeakSet弱引用
下一篇: js系列-函数Function
前端蜗牛君
博客等级 码龄10年 274粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值