学习ES6: Set&Map
Set
概览
类似数组,成员值唯一。
1 | const items = new Set([1, 2, 3, 4, 5, 5, 5, 4, 3, 2, 1]); |
衍生技巧
数组去重
1 | let arr = [1, 2, 3, 3, 2, 1]; |
… + set => map filter
扩展运算符 ...
和 Set
结构相结合,就可以间接的使用 map, filter 等。
1 | let set = new Set([1, 2, 3]); |
注意
- 向
Set
添加元素时,不发生类型转换。 NaN
只能添加一个。{}
空对象总是不相等。
1 | const s = new Set(); |
Set
遍历顺序即插入顺序。Set
键名键值相同。- 目前无法在遍历
Set
的过程中,同步改变原有的结构。
常用方法及属性
方法或属性 | 作用 | 返回值 |
---|---|---|
Set.size |
返回成员总数 | Number |
Size.add(value) |
添加value | Set |
Size.delete(value) |
删除成员 | Boolean |
Size.has(value) |
判定value是否是成员 | Boolean |
Size.clear() |
清空 | undefined |
WeakSet
与 Set
类似, 但 WeakSet
中的成员只能是对象,不能是别的类型值。
当试图添加其它类型值时,会抛出TypeError异常。
WeakSet
不可遍历。
WeakSet
中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet
对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet
之中。
WeakSet
没有 size
属性和遍历方法。
Map
概览
- 对象,键值对的集合。
- 键不再仅限于字符串。
- 当键为对象时,只有对同一个对象的引用,
Map
结构才将其视为同一个键。 - 当键为简单类型值,只要两个值严格相等,则视为同一个键。
NaN
视为同一键。
常用属性和方法
属性或方法 | 作用 | 返回值 |
---|---|---|
size |
返回成员总数 | Number |
set(key, value) |
设置键名为key,值为value的成员 | Map |
get(key) |
读取key对应的成员值 | |
has(key) |
是否有键值为key的成员 | Boolean |
delete(key) |
删除key对应的成员 | Boolean |
clear() |
清空 | undefined |
WeakMap
- 只接受对象作为键名(不包括
null
),不接受其它类型作为键名 - 其他参考WeakSet。