首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >js WeakSet的基本使用

js WeakSet的基本使用

原创
作者头像
IT工作者
修改于 2022-05-12 20:48:08
修改于 2022-05-12 20:48:08
1.2K0
举报
文章被收录于专栏:程序技术知识程序技术知识

ECMAScript 6 新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet 是 Set 的“兄弟”类型,其 API 也是 Set 的子集。WeakSet 中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱集合”中值的方式。

基本API

1. 创建WeakSet实例

可以使用 new 关键字实例化一个空的 WeakSet:

代码语言:javascript
复制
const ws = new WeakSet();

弱集合中的值只能是 Object 或者继承自 Object 的类型,尝试使用非对象设置值会抛出 TypeError。

如果想在初始化时填充弱集合,则构造函数可以接收一个可迭代对象,其中需要包含有效的值。可迭代对象中的每个值都会按照迭代顺序插入到新实例中:

代码语言:javascript
复制
const val1 = { id: 1 },
      val2 = { id: 2 };
const ws = new WeakSet([val1, val2]);

只要有一个值无效就会抛出错误,导致整个初始化失败:

代码语言:javascript
复制
const ws = new WeakSet([{ id: 1 }, true, { id: 2 }]);
// TypeError: Invalid value used in WeakSet 

原始值可以先包装成对象再用作值:

代码语言:javascript
复制
const str = new String("string");
const ws = new WeakSet([str]);

2. add()

add(): 添加元素

代码语言:javascript
复制
const val1 = { id: 1 },
      val2 = { id: 2 };
const ws = new WeakSet();
ws.add(val1).add(val2);

3. has()

has(): 查询某个元素是否存在(返回布尔值):

代码语言:javascript
复制
const val1 = { id: 1 },
      val2 = { id: 2 };
const ws = new WeakSet();
ws.add(val1).add(val2);
ws.has(val1); // true

4. delete()

代码语言:javascript
复制
delete(): 删除某个元素(返回布尔值):

const val1 = { id: 1 },
      val2 = { id: 2 };
const ws = new WeakSet();
ws.add(val1).add(val2);
ws.delete(val1); // true

弱值

WeakSet中的对象都是弱引用:

WeakSet 中对对象的引用不会被考虑进垃圾回收机制,这些值不属于正式的引用,不会阻止垃圾回收,即只要没有其他的对象引用该对象,则该对象就会被回收,而不管它在不在 WeakSet

不可迭代值

因为 WeakSet 中的值任何时候都可能被销毁,所以没必要提供迭代其值的能力。当然,也用不着像 clear()这样一次性销毁所有值的方法。WeakSet 确实没有这个方法。因为不可能迭代,所以也不可能在不知道对象引用的情况下从弱集合中取得值。即便代码可以访问 WeakSet 实例,也没办法看到其中的内容。

WeakSet 没有size属性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1. 创建WeakSet实例
  • 2. add()
  • 3. has()
  • 4. delete()
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档