首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js WeakSet的基本使用

ECMAScript 6 新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet 是 Set 的“兄弟”类型,其 API 也是 Set 的子集。...创建WeakSet实例 可以使用 new 关键字实例化一个空的 WeakSet: const ws = new WeakSet(); 弱集合中的值只能是 Object 或者继承自 Object 的类型,...(); ws.add(val1).add(val2); ws.delete(val1); // true 弱值 WeakSet中的对象都是弱引用: WeakSet 中对对象的引用不会被考虑进垃圾回收机制...WeakSet 确实没有这个方法。因为不可能迭代,所以也不可能在不知道对象引用的情况下从弱集合中取得值。即便代码可以访问 WeakSet 实例,也没办法看到其中的内容。...WeakSet 没有size属性。

68520
您找到你想要的搜索结果了吗?
是的
没有找到

JS中的WeakMap与WeakSet

介绍 WeakMap与WeakSet都是一种优化使用内存的解决方案。这两个数据结构的引用不会导致这些对象不被回收。上来就说这些有点太枯燥了,还是先聊聊它们能干什么。...WeakSet 集合就是一堆互异的数据,想必这个读者都早就明白了,这里不多说。 相对于正统Set,WeakSet只提供三个方法:add、delete和has。...说了这么多,还是来点代码: const set = new WeakSet() let mike = { name: 'Mike', age: 17 } let john = { name: 'John...set.add(1) // TypeError: Invalid value used in weak set WeakMap 上文提到的WeakSet,我是不知道它到底被广泛应用到哪里了。...顺带一提,同WeakSet一样,WeakMap的键必须是对象: barStorage.set(1, 2) // TypeError: Invalid value used as weak map key

35320

javascript之set和weakset的用法

今天我们来介绍一下数据结构Set和weakset set weakset 简单介绍 Set其实类似于数组,但是其中的成员值都是唯一的,没有重复的值。 如何构造一个Set?...1,1,3,4,5,5,6,8]) let c=new Set([...b].map(x=>x*2)) console.log(c) // Set(6) { 2, 6, 8, 10, 12, 16 } WeakSet...的使用其实和Set比较类似,他们的区别主要有两个: WeakSet的成员只能是对象,而不是能是别的类型的值 WeakSet的对象都是弱引用,不能遍历 什么叫弱引用呢,就是如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存...,不考虑该对象还存在于 WeakSet 之中。...WeakSet有三个方法: add(value) 增加某个值 delete(value) 删除某个值 has(value) 判断某个值是否存在 因为WeakSet不可遍历,WeakSet没有size属性

55920

Set、Map、WeakSet、WeakMap详细介绍

引言--Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。...WeakSet中存储的对象是弱引用关联的,即如果没有其他引用指向该对象,则该对象会被垃圾回收。WeakSet没有迭代器,不能遍历其中的元素。...使用场景存储临时数据:可以使用WeakSet来存储临时数据,不用担心内存泄漏的问题。...// 存储临时数据let obj1 = { name: 'John' };let obj2 = { name: 'Jane' };const weakSet = new WeakSet([obj1, obj2...而在WeakSet和WeakMap中,存储的对象是弱引用关联的。这意味着如果一个对象只有在WeakSet或WeakMap中存在引用,并且没有其他地方引用它,那么该对象将被垃圾回收机制自动回收。

13430

你知道什么是WeakSet 和 WeakMap吗?

'' : newArr.push(item) }) console.log(newArr) WeakSet WeakSet 和 Set 区别如下: WeakSet 只能储存对象引用,不能存放值,而 Set...因此 ES6 规定,WeakSet 对象是无法被遍历的,也没有办法拿到它包含的所有元素。 WeakSet 能够使用的方法如下: add(value)  方法:在 WeakSet 中添加一个元素。...// Set {{...}} weakSet.add(John); // WeakSet {{...}}...是否了解 WeakMap、WeakSet 参考答案: WeakSet 对象是一些对象值的集合, 并且其中的每个对象值都只能出现一次。...WeakSet 持弱引用:集合中对象的引用为弱引用。 如果没有其他的对 WeakSet 中对象的引用,那么这些对象会被当成垃圾回收掉。 这也意味着 WeakSet 中没有存储当前对象的列表。

44820

介绍下 Set、Map、WeakSet 和 WeakMap 的区别?

WeakSet WeakSet 对象允许你将弱引用对象储存在一个集合中 WeakSet 与 Set 的区别: WeakSet 只能储存对象引用,不能存放值,而 Set 对象都可以 WeakSet 对象中储存的对象值都是被弱引用的...,即垃圾回收机制不考虑 WeakSet 对该对象的应用,如果没有其他的变量或属性引用这个对象值,则这个对象将会被垃圾回收掉(不考虑该对象还存在于 WeakSet 中),所以,WeakSet 对象里有多少个成员元素...,取决于垃圾回收机制有没有运行,运行前后成员个数可能不一致,遍历结束之后,有的成员可能取不到了(被垃圾回收了),WeakSet 对象是无法被遍历的(ES6 规定 WeakSet 不可遍历),也没有办法拿到它包含的所有元素...属性: constructor:构造函数,任何一个具有 Iterable 接口的对象,都可以作参数 const arr = [[1, 2], [3, 4]] const weakset = new WeakSet...(arr) console.log(weakset) 方法: add(value):在WeakSet 对象中添加一个元素value has(value):判断 WeakSet 对象中是否包含value

1.6K20

前端测试题: 关于WeakSet结构,说法错误的是?

考核内容:Set和WeakSet的不同点 题发散度: ★★ 试题难度: ★ 解题思路: WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。...首先,WeakSet 的成员只能是对象,而不能是其他类型的值。...: invalid value used in weak set 上面代码试图向 WeakSet 添加一个数值和Symbol值,结果报错,因为 WeakSet 只能放置对象。...WeakSet 的成员是不适合引用的,因为它会随时消失。...另外,由于 WeakSet 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的, 因此 ES6 规定 WeakSet 不可遍历 参考代码

1.4K20

深入理解 ES6 新增的数据结构 Set 与 WeakSet

b.has(x))); difference // Set(2) {1, 2} 二、WeakSet 1、WeakSet 的基本用法 WeakSet 是一个构造函数,可以使用 new 命令,创建 WeakSet...数据结构 var ws = new WeakSet(); ws // WeakSet {} 作为构造函数,WeakSet 可以接受一个数组或类数组的对象作为参数,该数组的所有成员,都会自动成为 WeakSet...,a 是一个数组,它有两个成员,也都是数组 将 a 作为 WeakSet 构造函数的参数,a 的成员会自动成为 WeakSet 的成员 2、WeakSet 与 Set 的区别 WeakSet 结构与...,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中 这个特点意味着,无法引用 WeakSet 的成员,因此 WeakSet 是不可遍历的 3、WeakSet 实例的操作方法...); ws.add(obj); ws // WeakSet {{…}, Window} 输出结果详情: ② WeakSet.prototype.delete(value) 清除 WeakSet

35820

浅谈下垃圾回收机制(1)

垃圾回收机制与WeakSet (1)垃圾回收机制只考虑对象的强引用 (2)垃圾回收机制依赖「引用计数」,当计数为0,则GC自动回收该对象占用的内存。...WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet...WeakSet里面的引用,都不计入垃圾回收机制,所以就不存在这个问题。因此,WeakSet适合临时存放一组对象,以及存放跟对象绑定的信息。...只要这些对象在外部消失,它在WeakSet里面的引用就会自动消失。 由于上面这个特点,WeakSet的成员是不适合引用的,因为它会随时消失。...另外,由于WeakSet内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此ES6规定WeakSet不可遍历。

43120
领券