Open minhuaF opened 3 years ago
ES6提供了新的数据机构: Set、WeakSep、Map和WeakMap。
数据结构Set类型数组,但是没有重复值,值都是唯一的,值可以任何类型。 Set本身是构造函数,可以通过new直接创建对应的结构。
const set = new Set(); // or 传入初始化数组 const set1 = new Set([1,2,3]) // or 传入具有 iterable 接口的其他数据结构 const set2 = new Set(document.querySelectorAll('div'));
由于Set数据结构中的元素是不重复的,所以可以用来作为数组去重的方式
[...new Set(array)]
属性
方法
const set = new Set(); // 由于add方法返回的是Set结构本身,所以可以连续操作 set.add(1).add(3);
- Set.prototype.keys():返回键名的遍历器 - Set.prototype.values():返回键值的遍历器 - Set.prototype.entries():返回键值对的遍历器 - Set.prototype.forEach():使用回调函数遍历每个成员
数据结构WeakSet与Set类型,没有重复值,值也是唯一的,但是成员只能是对象,而不能是其他类型的值。
对于WeakSet的细节介绍,阮一峰老师已经解说的很详细了,这边没补充,就直接引用了,有需要可查看原文
其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。 这是因为垃圾回收机制依赖引用计数,如果一个值的引用次数不为0,垃圾回收机制就不会释放这块内存。结束使用该值之后,有时会忘记取消引用,导致内存无法释放,进而可能会引发内存泄漏。WeakSet 里面的引用,都不计入垃圾回收机制,所以就不存在这个问题。因此,WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。 由于上面这个特点,WeakSet 的成员是不适合引用的,因为它会随时消失。另外,由于 WeakSet 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakSet 不可遍历。
其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
这是因为垃圾回收机制依赖引用计数,如果一个值的引用次数不为0,垃圾回收机制就不会释放这块内存。结束使用该值之后,有时会忘记取消引用,导致内存无法释放,进而可能会引发内存泄漏。WeakSet 里面的引用,都不计入垃圾回收机制,所以就不存在这个问题。因此,WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。
由于上面这个特点,WeakSet 的成员是不适合引用的,因为它会随时消失。另外,由于 WeakSet 内部有多少个成员,取决于垃圾回收机制有没有运行,运行前后很可能成员个数是不一样的,而垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakSet 不可遍历。
数据结构Map与Object类型,本质上是键值对的集合(Hash结构); Map数据结构的出现主要是为了解决原有的Object对象的键只能是字符串的局限; Map的”键“支持各种类型的结构;
操作方法
遍历方法
WeakMap结构与Map结构类似,也是用于生成键值对的集合; WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名; WeakMap的键名所指向的对象,不计入垃圾回收机制;
遍历方法 无
Set 和 Map 数据结构
ES6提供了新的数据机构: Set、WeakSep、Map和WeakMap。
Set
数据结构Set类型数组,但是没有重复值,值都是唯一的,值可以任何类型。 Set本身是构造函数,可以通过new直接创建对应的结构。
由于Set数据结构中的元素是不重复的,所以可以用来作为数组去重的方式
属性和方法
属性
方法
WeakSet
数据结构WeakSet与Set类型,没有重复值,值也是唯一的,但是成员只能是对象,而不能是其他类型的值。
对于WeakSet的细节介绍,阮一峰老师已经解说的很详细了,这边没补充,就直接引用了,有需要可查看原文
属性和方法
属性
方法
Map
数据结构Map与Object类型,本质上是键值对的集合(Hash结构); Map数据结构的出现主要是为了解决原有的Object对象的键只能是字符串的局限; Map的”键“支持各种类型的结构;
属性和方法
属性
方法
操作方法
遍历方法
WeakMap
WeakMap结构与Map结构类似,也是用于生成键值对的集合; WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名; WeakMap的键名所指向的对象,不计入垃圾回收机制;
属性和方法
属性
方法
操作方法
遍历方法 无
总结
总结下Set、Map、WeakSet和WeakMap的区别
参考资料
Set 和 Map 数据结构