js WeakSet的基本使用
介绍ECMAScript 6 新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet 是 Set 的“兄弟”类型,其 API 也是 Set 的子集。WeakSet 中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱集合”中值的方式。基本API1. 创建WeakSet实例可以使用 new 关键字实例化一个空的 WeakSet:co
介绍
ECMAScript 6 新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet 是 Set 的“兄弟”类型,其 API 也是 Set 的子集。WeakSet 中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱集合”中值的方式。
基本API
1. 创建WeakSet实例
可以使用 new 关键字实例化一个空的 WeakSet:
const ws = new WeakSet();
弱集合中的值只能是 Object 或者继承自 Object 的类型,尝试使用非对象设置值会抛出 TypeError。
如果想在初始化时填充弱集合,则构造函数可以接收一个可迭代对象,其中需要包含有效的值。可迭代对象中的每个值都会按照迭代顺序插入到新实例中:
const val1 = { id: 1 },
val2 = { id: 2 };
const ws = new WeakSet([val1, val2]);
只要有一个值无效就会抛出错误,导致整个初始化失败:
const ws = new WeakSet([{ id: 1 }, true, { id: 2 }]);
// TypeError: Invalid value used in WeakSet
原始值可以先包装成对象再用作值:
const str = new String("string");
const ws = new WeakSet([str]);
2. add()
add(): 添加元素
const val1 = { id: 1 },
val2 = { id: 2 };
const ws = new WeakSet();
ws.add(val1).add(val2);
3. has()
has(): 查询某个元素是否存在(返回布尔值):
const val1 = { id: 1 },
val2 = { id: 2 };
const ws = new WeakSet();
ws.add(val1).add(val2);
ws.has(val1); // true
4. delete()
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属性。
更多推荐
所有评论(0)