Set、Map、WeakSet、WeakMap

Set_、_Map_、_WeakSet_、_WeakMap 是 ES2015 中新增的几个对象:

set 类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
Set 和 WeakSet 与数组类似,准确的它他们是集合,这两者的区别就是 Set 可以存储任何数据类型,而 WeakSet 只能存储对象的引用,而且是弱引用;
Set 对象在实际开发中最常见的就是实现数据去重,示例代码如下:

1
2
3
4
5
const arr = [1, 2, 2, 3, 4, 3, 5]
const set = new Set(arr)
// set对象可以使用 ... 展开 所有项
console.log([...set]) // [ 1, 2, 3, 4, 5 ]

map 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。
Map 和 WeakMap 与对象类似,存储方式是键值对形式的,这两者的区别 Map 的键值对都是可以是任意的而 WeakMap 键必须是对象的引用而值可以是任意类型的。