liace

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

js weekset和weekmap详解

在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提供了一种方便的方式来处理对对象的弱引用,但也要注意它们的特点和限制。

posted on   凉策  阅读(229)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示