Set与WeakSet Set对象允许存储任何类型的唯一值,无论是原始值或者是对象引用,Set对象中的值不会重复。...WeakSet对象允许存储对象弱引用的唯一值,WeakSet对象中的值同样不会重复,且只能保存对象的弱引用。...WeakSet持有的是对象的弱引用,这意味着在没有其他引用存在时垃圾回收能正确进行,WeakSet用于存储的对象引用只有在其没有被回收时才是有效的,正由于弱引用,WeakSet是不可枚举的。...WeakSet.prototype.add(value): 在该WeakSet对象中添加一个新元素value。...WeakSet.prototype.delete(value): 从该WeakSet对象中删除value这个元素。
set set是类似于数组集合的数据结构,成员唯一且无序 操作方法 add('xx'):添加,返回添加后的值 delect('xx'):删除,返回boolean has('xx'):判断是否存在某个值...(箭头函数获取不到this,你懂的) map map对象保存键值对,任何值都可以作为一个键或一个值 操作方法 set(key,value):添加元素 get(key):通过key获取value...(箭头函数获取不到this,你懂的) WeakSet WeakSet 只能存储对象引用,不能存放值,而set对象可以,不可遍历 weakSet对象存储对象是弱引用的,对象会被垃圾回收机制回收掉 操作方法...weakMap对象是一组键值对的集合,其中键是弱引用,所以键不可以为基本数据类型,必需是引用类型,值可以为任意值 操作方法 has(key):是否存在某个键 get(key):通过key值获取value set
Map(这点和Set特性一致)中,0、+0、-0为同一值,以及NaN,故只能存在其中一个,且引用数据类型作为Key时,如果引用地址一致,那么也只能保持一个,如:图片h....WeakMap不可迭代,但可以使用map.set()、map.has()、map.delete()方法,但没有get方法c....不可使用二维数组初始化WeakMap三、Set与Map对比a....方法不同,Set是set.add(),set.clear(),set.delete(),set.has(),也有size属性等b. 0、+0、-0为同一值,以及NaN,故只能存在其中一个,且引用数据类型作为...可以使用二维数组初始化Set,如:图片e. Set也是使用for-of进行迭代四、WeakSet与Set基本上和WeakMap一致,但WeakSet没有get方法图片
引言--Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。...WeakSet中存储的对象是弱引用关联的,即如果没有其他引用指向该对象,则该对象会被垃圾回收。WeakSet没有迭代器,不能遍历其中的元素。...、Map、WeakSet和WeakMap的用法和特性。...而在WeakSet和WeakMap中,存储的对象是弱引用关联的。这意味着如果一个对象只有在WeakSet或WeakMap中存在引用,并且没有其他地方引用它,那么该对象将被垃圾回收机制自动回收。...另外,由于弱引用关联的特性,WeakSet和WeakMap没有提供像Set和Map那样的迭代器方法来遍历元素。也没有size属性来获取元素个数。这是为了确保不会干扰垃圾回收机制对对象的处理。
但是在一些业务场景中,我们并不需要集合维护一个有序的状态,甚至有些场景需要无序集合,因此ES6里加入了无序集合Set和其的Weak版本WeakSet。...这篇文章笔者将从以下几方面进行介绍: Set代码示例 Set和Array的区别 Set常用方法 WeakSet介绍 本篇文章阅读时间预计5分钟 01 Set代码示例 Set需要使用新语法new Set(...首先让我们了解下WeakSet与Set的不同,以下三点是WeakSet与Set不一样的地方: Set可以存储值类型和对象引用类型,而WeakSet只能存储对象引用类型,否则会抛出TypeError。...: Invalid value used in weak set weakset.add(a); })(); //here 'a' is garbage collected from weakset...如果不涉及排序需要去重的业务场景,我们可以尝试使用set,如果你想优化程序内存的使用,你可以尝试使用WeakSet。
今天我们来介绍一下数据结构Set和weakset set weakset 简单介绍 Set其实类似于数组,但是其中的成员值都是唯一的,没有重复的值。 如何构造一个Set?...Set实例的操作方法 Set有四个主要的操作方法:add()、delete()、has()、clear() add(value)为Set添加某个值,返回set本身 delete(value)删除Set中的某个值..., 12, 16 } WeakSet的使用其实和Set比较类似,他们的区别主要有两个: WeakSet的成员只能是对象,而不是能是别的类型的值 WeakSet的对象都是弱引用,不能遍历 什么叫弱引用呢...,就是如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。...WeakSet有三个方法: add(value) 增加某个值 delete(value) 删除某个值 has(value) 判断某个值是否存在 因为WeakSet不可遍历,WeakSet没有size属性
但是在一些业务场景中,我们并不需要集合维护一个有序的状态,甚至有些场景需要无序集合,因此ES6里加入了无序集合Set和其的Weak版本WeakSet。...这篇文章笔者将从以下几方面进行介绍: Set代码示例 Set和Array的区别 Set常用方法 WeakSet介绍 本篇文章阅读时间预计5分钟 Set代码示例 Set需要使用新语法new Set()声明...首先让我们了解下WeakSet与Set的不同,以下三点是WeakSet与Set不一样的地方: Set可以存储值类型和对象引用类型,而WeakSet只能存储对象引用类型,否则会抛出TypeError。...: Invalid value used in weak set weakset.add(a); })(); //here 'a' is garbage collected from weakset...如果不涉及排序去重的场景,我们可以尝试使用set,如果你想优化程序内容的使用,你可以尝试使用WeakSet。
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
WeakSet 含义 WeakSet 结构与 Set 类似,也是不重复的值的集合。 但是,它与 Set 有两个区别。 首先,WeakSet 的成员只能是对象,而不能是其他类型的值。...const ws = new WeakSet(); ws.add(1) // TypeError: Invalid value used in weak set ws.add(Symbol()) //...TypeError: invalid value used in weak set 上面代码试图向 WeakSet 添加一个数值和Symbol值,结果报错,因为 WeakSet 只能放置对象。...const b = [3, 4]; const ws = new WeakSet(b); // Uncaught TypeError: Invalid value used in weak set(…)...WeakSet 结构有以下三个方法。 WeakSet.prototype.add(value):向 WeakSet 实例添加一个新成员。
let setArr = new Set(['1','2','3']); console.log(setArr.size)// 3 二、WeakSet WeakSet 结构与 Set 类似,也是不重复的值的集合...但是,它与 Set 有两个区别。 首先,WeakSet 的成员只能是对象,而不能是其他类型的值。...WeakSet 之中。...因此WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。 ES6 规定 WeakSet 不可遍历。...总结:在实际开发中Set用的比较多,WeakSet用的并不多,但是WeakSet对传入值必须是对象作了很好的判断。
遍历set类型的方式 使用set处理网站关键字 并集交集差集 WeakSet语法介绍 引用类型的垃圾回收原理 列表删除案例 set类型与array和object的区别 set类型跟数组一样可以放多个值...b.has(item)) )); WeakSet语法介绍 //跟set的区别是 WeakSet值需要是引用类型 let set = new WeakSet()...//添加内容 set.add(['xiaoixe', 'xiaoxietongzhi']) //添加dom元素 let nodes = new WeakSet...= new WeakSet() //给WeakSet添加内容,WeakSet是弱引用,对象实际上是被 hd obj引用了两次。...适用于临时存放一组对象,以及存放和对象绑定的信息,只要这些对象在外部消失,那么它在 weakset 里面的引用也会自动消失,类似单向绑定。
b.has(x))); difference // Set(2) {1, 2} 二、WeakSet 1、WeakSet 的基本用法 WeakSet 是一个构造函数,可以使用 new 命令,创建 WeakSet...,a 是一个数组,它有两个成员,也都是数组 将 a 作为 WeakSet 构造函数的参数,a 的成员会自动成为 WeakSet 的成员 2、WeakSet 与 Set 的区别 WeakSet 结构与...Set 类似,也是不重复的值的集合 但它与 Set 有两个区别: ① WeakSet 的成员只能是对象,而不能是其他类型的值 var ws = new WeakSet(); ws.add(1) /...set 上面代码试图向 WeakSet 添加一个数值和 Symbol 值,结果报错,因为 WeakSet 只能放置对象 ② WeakSet 中的对象都是弱引用 即垃圾回收机制不考虑 WeakSet 对该对象的引用...是不可遍历的 3、WeakSet 实例的操作方法 ① WeakSet.prototype.add(value) 向 WeakSet 实例添加一个新成员 var ws = new 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属性。
/ 1024).toFixed(2)}MB`) const wm = new WeakMap() let key = {} // 给 WeakMap实例 赋值一个 占领内存足够大的 键值对 wm.set...process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)}MB` ); const m = new Map(); let key = {}; m.set...当前内存使用情况:1.94MB, // 当前Map的长度: 0 附录 使用 node 命令执行js的时候加入 –expose-gc参数的作用 --expose-gc 参数表示允许手动执行垃圾回收机制 相关链接 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
在ES6中新增了另外两种数据结构:Set、Map,以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是元素不能重复。...WeakSet的基本使用 和Set类似的另外一个数据结构称之为WeakSet,也是内部元素不能重复的数据结构。...const weakSet = new WeakSet() // 1.区别一: 只能存放对象类型 // TypeError: Invalid value used in weak set // weakSet.add...= new Set() // 建立的是强引用 set.add(obj) // 建立的是弱引用 weakSet.add(obj) WeakSet常见方法 add(value):添加某个元素,返回WeakSet...WeakSet的应用 注意:WeakSet不能遍历 因为WeakSet只是对对象的弱引用,如果我们遍历获取到其中的元素,那么有可能造成对象不能正常的销毁。
WeakSet.prototype 表示 WeakSet 构造函数的原型,允许向所有 WeakSet 对象添加属性。...在WeakSet的集合中是唯一的 它和 Set 对象的区别有两点: 与Set相比,WeakSet 只能是「对象的集合」,而不能是任何类型的任意值。 WeakSet持弱引用:集合中对象的引用为弱引用。...(foo); // true ws.has(bar); // true ws.delete(foo); // 从set中删除 foo 对象 ws.has(foo); // false,...***因此,它们都可以被加入到set中。 检测循环引用 递归调用自身的函数需要一种通过跟踪哪些对象已被处理,来应对循环数据结构的方法。...对象的数量或它们的遍历顺序无关紧要,因此,WeakSet比Set更适合(和执行)跟踪对象引用,尤其是在涉及大量对象时。
考核内容:Set和WeakSet的不同点 题发散度: ★★ 试题难度: ★ 解题思路: WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。...首先,WeakSet 的成员只能是对象,而不能是其他类型的值。...: invalid value used in weak set 上面代码试图向 WeakSet 添加一个数值和Symbol值,结果报错,因为 WeakSet 只能放置对象。...WeakSet 的成员是不适合引用的,因为它会随时消失。...另外,由于 WeakSet 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的, 因此 ES6 规定 WeakSet 不可遍历 参考代码
什么是WeakSet WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。 1.WeakSet 的成员只能是对象,而不能是其他类型的值。...value used in weak set weakSet.add(true);//Uncaught TypeError: Invalid value used in weak set weakSet.add...set weakSet.add([1,2]);//WeakSet {{a:'first',b:'one'},[1,2]} WeakSet 可以接受一个数组或类似数组的对象作为参数。...value used in weak set let weakSet = new WeakSet(); weakSet.add({a:'first',b:'one'});//WeakSet {{a...WeakSet 中的对象都是弱引用。 WeakSet 相比 Set,少了clear方法和size属性。 WeakSet 不能使用forEach方法。
Set接口中不能加入重复的元素,但可以排序 Set接口子类: 无重复:HashSet 有序:TreeSet public static void main(String args[]){...Set s1 = new HashSet(); s1.add("a"); s1.add("b"); s1.add("a"); System.out.println...(s1);//[a b] Set s2 = new TreeSet(); s2.add("c"); s2.add("a"); s2
领取专属 10元无门槛券
手把手带您无忧上云