ES6新增的Set和Map
最近在看Set和Map两种新数据结构,弄了半天也没完全懂,平时实践的也不多,写下 一点总结供自己回顾。
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
Set:
Set是ES6新增的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。允许你存储任何类型的值,类似集合。
比如:let set = new Set(['red', 'green', 'blue']);
所以扩展运算符和Set 结构相结合实现数组或字符串去重。
方法有增add(),删delete()、clear(),查get(),以及遍历API和size属性。
WeakSet:
和Set的区别就是成员都是对象,并且是弱引用,能被垃圾机制回收,不容易造成内存泄漏。可以用来保存DOM节点。
Map:
Map类型是键值对的有序列表,而键和值都可以是任意类型。比如
const map = new Map([
['F', 'no'],
['T', 'yes'],
]);
方法有增set(),删delete()、clear(),查get()、has(),以及遍历API和size属性
WeakMap:
和Map类似,但是没有遍历操作的API,没有clear清空方法。
除此之外,还有如下特点:
(1)、WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名,但是键值可以是任意。
(2)、WeakMap的键名所指向的对象是弱引用,一旦不再需要,会被垃圾机制回收,不用手动删除引用。
使用场景:
(1)、在网页的 DOM 元素上添加数据,就可以使用WeakMap结构,当该 DOM 元素被清除,其所对应的WeakMap记录就会自动被移除。

(2)、键值会在WeakMap产生新的引用,当你修改时不会影响到内部,所以可以用来递归赋值实现深拷贝。
示例:更改了obj的值但依旧可以拿到

深拷贝方法具体如下:
