当前位置: 首页 > news >正文

Javascript》》JS》》ES6》 Map、Set、WeakSet、WeakMap

在这里插入图片描述

Map(映射)

特点: 是键值对的集合,但键可以是任意类型(对象、函数、原始值),而不仅仅是字符串。

// 使用对象作为键
const objKey = { id: 1 };
const myMap = new Map();// 设置键值对
myMap.set(objKey, 'Value associated with objKey');
myMap.set('name', 'Alice');// 获取值
console.log(myMap.get(objKey)); // 'Value associated with objKey'
console.log(myMap.get('name')); // 'Alice'// 可迭代
for (let [key, value] of myMap) {console.log(key, value);
}
// 输出: { id: 1 } ‘Value associated with objKey’
// 输出: name Aliceconsole.log(myMap.size); // 2

Set (集合)

特点: 是的集合,且值都是唯一的(没有重复项)。它更像是数学上的集合。

const mySet = new Set();// 添加值
mySet.add(1);
mySet.add(2);
mySet.add(2); // 重复添加,会被忽略
mySet.add('hello');console.log(mySet); // Set(3) { 1, 2, ‘hello’ }// 检查是否存在
console.log(mySet.has(2)); // true// 可迭代
mySet.forEach(value => {console.log(value);
});// 数组去重
const numbers = [1, 2, 3, 3, 4, 4, 5];
const uniqueNumbers = [...new Set(numbers)]; // [1, 2, 3, 4, 5]console.log(mySet.size); // 3

WeakMap (弱映射)

在这里插入图片描述
常用场景:存储对象的私有数据或元数据:将数据与对象关联,且当对象被销毁时,希望关联的数据也能自动被清除,避免内存泄漏。

let obj1 = { id: 1 };
let obj2 = { id: 2 };

const myWeakMap = new WeakMap();

// 设置键值对
myWeakMap.set(obj1, ‘Private data for obj1’);
myWeakMap.set(obj2, ‘This will be cleared’);

console.log(myWeakMap.get(obj1)); // ‘Private data for obj1’

// 删除对 obj2 的强引用
obj2 = null;

// 在未来的某个时刻,垃圾回收器会自动将 obj2 从内存中清除,
// 同时它在 myWeakMap 中的条目也会被自动移除。
// 我们无法手动检查或观察到这一瞬间,但可以确信它会发生。

WeakSet (弱集合)

在这里插入图片描述
**常用场景:**标记对象:例如跟踪一个对象是否已经被处理过,而不用担心内存管理问题。

let objA = { name: 'A' };
let objB = { name: 'B' };const checkedSet = new WeakSet();// 标记对象
checkedSet.add(objA);
checkedSet.add(objB);// 检查对象是否被标记过
console.log(checkedSet.has(objA)); // true// 当 objA 在其他地方不再被引用并被回收后,它在 checkedSet 中的存在也会自动消失。
objA = null;
console.log(checkedSet.has(objA)); // false
http://www.xdnf.cn/news/1432981.html

相关文章:

  • 【MATLAB绘图进阶】(3.1)从基础到高级的图形样式控制
  • Android14 init.rc各个阶段的主要操作详解2
  • gbase8s之导出mysql导入gbase8s
  • 良策金宝AI:电力工程的“最强大脑”,如何重塑设计新范式?
  • css中的v-bind 动态变化
  • 技术架构设计--资源与链接、安全灾备
  • Android URC 消息透传 MTK 代码方案
  • T40N君正/INGENIC专业嵌入式CPU计算能力,集成XBurst2双核处理器(1.2GHz)、RISC-V协处理器和神经网络加速器(2TOPS算力)
  • 防止应用调试分析IP被扫描加固实战教程
  • 宋红康 JVM 笔记 Day11|直接内存
  • 爬虫基础学习 - Beautifulsoup
  • 电子电子技术知识------MOSFET管
  • 高校党建信息管理系统的设计与实现-(源码+LW+可部署)
  • 实验4-HTTP协议的运行过程
  • 【大前端】Vue 和 React 主要区别
  • React 中 key 的作用
  • C#---共享项目
  • 解决戴尔笔记本电脑键盘按键部分失灵
  • python 创建websocket教程
  • 从自动化到智能化:家具厂智能化产线需求与解决方案解析
  • Qt内存映射到文件,解决打开大文件占用内存高的问题
  • STM32-FreeRTOS操作系统-任务管理
  • Linux - 进程切换 进程调渡
  • 【Linux】进程信号
  • 第2.7节:多模态大模型之Midjourney
  • AI与低代码时代,自动化测试平台如何选型?主流工具详细对比及选型标准解析
  • github添加SSH密钥
  • vue2 跟 vue3 对比总结
  • 面向机器人系统的虚实迁移强化学习:从仿真训练到真实落地的技术突破
  • 重磅!PS2021 和企业微信 5.0 可直接运行,统信兼容引擎 V3.3.2 全面升级!