1. 集合(Set)
ES6 新增的一种新的数据结构,类似于数组,但成员是唯一且无序的,没有重复的值。
1、Set 是无重复值的有序列表。根据 Object.is() 方法来判断其中的值不相等,以保证无重
复。
2、Set 会自动移除重复的值,因此你可以使用它来过滤数组中的重复值并返回结果。
3、Set 并不是数组的子类型,所以你无法随机访问其中的值。但你可以使用 has() 方法来判断某个值是否存在于 Set 中,或通过 size 属性来查看其中有多少个值。
4、Set 类型还拥有forEach() 方法,用于处理每个值。
Set的操作方法有:
-
add(value):新增,相当于 array里的push
-
delete(value):存在即删除集合中value
-
has(value):判断集合中是否存在 value
-
clear():清空集合
Set的遍历方法有:
-
keys():返回一个包含集合中所有键的迭代器
-
values():返回一个包含集合中所有值得迭代器
-
entries():返回一个包含Set对象中所有元素得键值对迭代器
-
forEach(callbackFn, thisArg):用于对集合成员执行callbackFn操作,如果提供了 thisArg 参数,回调中的this会是这个参数,没有返回值
2. WeakSet
Weak Set 是只能包含对象的特殊 Set 。其中的对象使用弱引用来存储,意味着当 Weak Set
中的项是某个对象的仅存引用时,它不会屏蔽垃圾回收。由于内存管理的复杂性,
Weak Set 的内容不能被检查,因此最好将 WeakSet 仅用于追踪需要被归组在一起的对象。
WeakSet 对象允许你将弱引用对象储存在一个集合中
WeakSet 与 Set 的区别:
-
WeakSet 只能储存对象引用,不能存放值,而 Set 对象都可以
-
WeakSet 对象中储存的对象值都是被弱引用的,即垃圾回收机制不考虑 WeakSet 对该对象的应用,如果没有其他的变量或属性引用这个对象值,则这个对象将会被垃圾回收掉(不考虑该对象还存在于 WeakSet 中),所以,WeakSet 对象里有多少个成员元素,取决于垃圾回收机制有没有运行,运行前后成员个数可能不一致,遍历结束之后,有的成员可能取不到了(被垃圾回收了),WeakSet 对象是无法被遍历的(ES6 规定 WeakSet 不可遍历),也没有办法拿到它包含的所有元素
方法:
-
add(value):在WeakSet 对象中添加一个元素value
-
has(value):判断 WeakSet 对象中是否包含value
-
delete(value):删除元素 value
3. 字典(Map)
集合 与 字典 的区别:
-
共同点:集合、字典 可以储存不重复的值
-
不同点:集合 是以 [value, value]的形式储存元素,字典 是以 [key, value] 的形式储存
Map 是有序的键值对,其中的键允许是任何类型。与 Set 相似,通过调用 Object.is() 方法
来判断重复的键,这意味着能将数值 5 与字符串 "5" 作为两个相对独立的键。使用
set() 方法能将任何类型的值关联到某个键上,并且该值此后能用 get() 方法提取出来。
Map 也拥有一个 size 属性与一个 forEach() 方法,让项目访问更容易。
操作方法:
-
set(key, value):向字典中添加新元素
-
get(key):通过键查找特定的数值并返回
-
has(key):判断字典中是否存在键key
-
delete(key):通过键 key 从字典中移除对应的数据
-
clear():将这个字典中的所有元素删除
遍历方法
-
keys():将字典中包含的所有键名以迭代器形式返回
-
values():将字典中包含的所有数值以迭代器形式返回
-
entries():返回所有成员的迭代器
-
forEach():遍历字典的所有成员
4. WeakMap
Weak Map 是只能包含对象类型的键的特殊 Map 。与 WeakSet 相似,键的对象引用是弱引
用,因此当它是某个对象的仅存引用时,也不会屏蔽垃圾回收。当键被回收之后,所关联的
值也同时从 Weak Map 中被移除。对于和对象相关联的附加信息来说,若要在访问它们的代
码之外对其进行生命周期管理(也就是说,当在对象外部移除对象的引用时,要求其私有数
据也能一并被销毁),则 Weak Map 在内存管理方面的特性让它们成为了唯一合适的选择。
方法:
-
has(key):判断是否有 key 关联对象
-
get(key):返回key关联对象(没有则则返回 undefined)
-
set(key):设置一组key关联对象
-
delete(key):移除 key 的关联对象