首页 > 其他分享 > js weekset和weekmap详解

js weekset和weekmap详解

时间:2023-08-01 14:11:11浏览次数:29  
标签:const myWeakSet WeakMap js weekmap myWeakMap console weekset WeakSet

在JavaScript中,WeakSet和WeakMap是Set和Map的变体,它们的特点是只能存储对对象的弱引用。这意味着,如果一个对象只被WeakSet或WeakMap引用,而没有被其他地方引用,那么它可能会被垃圾回收器清理掉。这在某些情况下非常有用,比如处理缓存或临时数据等。

WeakSet和WeakMap的用法与Set和Map类似,但有一些区别:

WeakSet:

  • WeakSet存储的是对象的弱引用,而不是对象本身。
  • WeakSet中的对象是无序的。
  • WeakSet没有size属性,也没有forEach方法。
  • WeakSet没有迭代器,不能使用for...of循环进行遍历。

下面是使用WeakSet的示例:

Copy
// 创建一个WeakSet
const myWeakSet = new WeakSet();

// 添加对象
const obj1 = {name: 'John'};
const obj2 = {name: 'Jane'};

myWeakSet.add(obj1);
myWeakSet.add(obj2);

// 判断对象是否存在
console.log(myWeakSet.has(obj1)); // true
console.log(myWeakSet.has(obj2)); // true

// 删除对象
myWeakSet.delete(obj1);

// 注意:不能使用forEach或者for...of对WeakSet进行遍历

WeakMap:

  • WeakMap的键是对象的弱引用,值可以是任何类型。
  • WeakMap中的键值对是无序的。
  • WeakMap没有size属性,也没有forEach方法。
  • WeakMap没有迭代器,不能使用for...of循环进行遍历。

下面是使用WeakMap的示例:

Copy
// 创建一个WeakMap
const myWeakMap = new WeakMap();

// 添加键值对
const key1 = {name: 'John'};
const key2 = {name: 'Jane'};

myWeakMap.set(key1, 30);
myWeakMap.set(key2, 35);

// 获取值
console.log(myWeakMap.get(key1)); // 30

// 删除键值对
myWeakMap.delete(key2);

// 判断键是否存在
console.log(myWeakMap.has(key1)); // true
console.log(myWeakMap.has(key2)); // false

// 注意:不能使用forEach或者for...of对WeakMap进行遍历

总结来说,WeakSet和WeakMap提供了一种方便的方式来处理对对象的弱引用,但也要注意它们的特点和限制。

标签:const,myWeakSet,WeakMap,js,weekmap,myWeakMap,console,weekset,WeakSet
From: https://www.cnblogs.com/liace/p/17596299.html

相关文章

  • 【宝塔面板部署nodeJs项目】网易云nodeJs部署在云服务器上,保姆级教程,写网易云接口用自
    看了很多部署的,要么少步骤,要么就是写的太简洁,对新手不友好前言参考链接服务器如何上线node.js项目【项目放置在github中】宝塔部署nodejs项目参考多篇文章,主要为上2篇,才总结本篇提示:这里可以添加本文要记录的大概内容:github传送门,可一键下载它的代码到本地运行网易云n......
  • JS常用正则表达式
    1.文本框输入验证<!--限制文本框只能输入正数--><inputtype="text"οnkeyup="this.value=this.value.replace(/\D/g,'')"/><!--限制文本框只能输入正数、小数--><inputtype="text"οnkeyup="this.value=this.value.replace(/[^......
  • 前端路由+原生JS实现SPA
    前端路由●路由:就是一一对应关系的集合●前端路由:就是一个url地址,对应哪个组件(页面)●前端路由的本质○根据地址栏变化(不重新想服务器发送请求),去局部更新不同的页面内容,完成前端业务场景切换●前端路由的思路○URL地址栏中的Hash值发生了变化○前端JS监听到H......
  • js instanOf的实现逻辑 super()
    在JavaScript中,instanceof 运算符用于检查一个对象是否是另一个对象的实例。它的使用形式是 objinstanceofconstructor,其中 obj 是要检查的对象,constructor 是要检查的构造函数。instanceof 运算符的实现逻辑如下:首先,它会检查 constructor 是否是一个函数。如果 ......
  • JS正则表达式大全
    字符含意\做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。^匹配一个输入或一行的开头,/^a/匹......
  • jQuery验证控件jquery.validate.js使用说明
    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validationjQueryplugin:Validation使用说明一导入js库<scriptsrc="../js/jquery.js"type="text/javascript"></script><scriptsrc="../js/jquery.validate.js"type=&q......
  • Node.js 与前端开发实战
    0x1Node.js的应用场景前端工程化打包工具:webpack、vite、esbuild、parce代码压缩:uglifyjs语法转换:babeljs,typescript难以替代Web服务端应用学习曲线平缓,开发效率较高运行效率接近常见的编程语言社区生态丰富及工具链成熟(npm)与前端结合的场景会有优势(SSR)竞......
  • Next.js 实战
    0x1CSR,SSR,SSGCSR客户端渲染(Client-SideRendering)。常见B端Web应用开发模式,前后端分离,服务器压力相对更轻,渲染工作在客户端进行,服务器直接返回不加工的HTML用户在后续访问操作缺点:首屏时间长SSR服务端渲染(Server-SideRendering)。JSP/PHP已经体现了服务器端渲染,......
  • Android上基于JSON的数据交互应用
    JSON的定义:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。–Json.org......
  • android网络通讯数据封装之 json
    Demo程序包括客户端和服务端客户端按json数据格式封装数据传至服务端。服务端为简单的servlet程序,负责接收客户端传到json数据,然后按原数据返回客户端.实例代码如下:publicstaticStringcmdLogIn(){StringurlString="http://192.168.8.75:89/webroot/jsontest";HttpPo......