Set
Set 是ES6新增的数据结构,可以存放任意类型的值,但成员是无序且唯一.Set 类似于数组,只有值没有健,或者说键名等于键值。
# 新建一个Set
let set = new Set();
# 增加一个元素
set.add(1);
# 可以增加一个同值但不同类型的元素
set.add('1');
# 检测是否包含一个元素
set.has(1);
# 删除一个元素
set.delete(1);
# 遍历 (遍历顺序为插入顺序)
keys():
values():
entries():
forEach(callbackFn
, thisArg
)
let set = new Set([1, 2, 3])
console
.log(set.keys())
console
.log(set.values())
console
.log(set.entries())
for (let item
of set.keys()) {
console
.log(item
);
}
for (let item
of set.entries()) {
console
.log(item
);
}
set.forEach((value
, key
) => {
console
.log(key
+ ' : ' + value
)
})
console
.log([...set])
#
map()和filter()方法
let set = new Set([1, 2, 3])
set = new Set([...set].map(item
=> item
* 2))
console
.log([...set])
set = new Set([...set].filter(item
=> (item
>= 4)))
console
.log([...set])
WeakSet
成员都是对象,不能存放值成员都是弱引用的,随时可以消失。即垃圾回收机制不考虑 WeakSet 对该对象的应用,如果没有其他的变量或属性引用这个对象值,则这个对象将会被垃圾回收掉(不考虑该对象还存在于 WeakSet 中),所以,WeakSet对象里有多少个成员元素,取决于垃圾回收机制有没有运行,运行前后成员个数可能不一致,遍历结束之后,有的成员可能取不到了(被垃圾回收了)。可以用来保存DOM节点,不容易造成内存泄漏不能遍历,方法有add、delete、has.
Map
Map和Set 的区别
Map存的是键值对,而Set只有键值。Map增加或更新数据的方法是set。
WeakMap
在WeakMap中数据是以键值对存储,但只有对象(null 除外)才能作为键名,键值可以任意。
WeakMap中的键名是弱引用对象,若没有其他引用指向该对象,该对象将被GC回收。因此,WeakMap的key不可以遍历。
参考 :https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/6