1. Set
Set中成员的值是唯一的,没有重复的值。可以用于去除数组重复数据。
let set = new Set()
// 在Set内部,两个NaN是相等的
let a = NaN, b = NaN
set.add(a).add(b)
set.size // 1
// 两个对象总是不相等的
set.add({})
set.size // 2
set.add({})
set.size // 3
2个实例属性
-
Set.prototype.constructor:请忽略 Set.prototype.size
4个操作方法
add(value)delete(value)has(value)clear()
4个遍历方法
keys()-
values():默认 -
entries():键名和键值是同一个值,该方法用处不大 forEach()
set的遍历顺序就是插入顺序。
数组的map和filter方法也可以间接用于Set。
2. WeakSet
与Set的2个区别:
- WeakSet的成员只能是对象(
null也不行),而不能是其他类型的值。- WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对改对象的引用。
3个操作方法
add(value)delete(value)has(value)
无size属性,WeakSet不可遍历。
无clear()操作方法,无遍历操作。
好处:不会出现内存泄露。
3. Map
Object:字符串—值
Map:值—值
属性
size
5个操作方法
set(key, value)get(key)has(key)delete(key)clear()
4个遍历方法
keys()values()-
entries():默认 forEach()
Map的遍历顺序就是插入顺序,和Set一样。
结合数组的map方法、filter方法,可以实现Map的遍历和过滤(Map本身没有map和filter方法)
Map的forEach与数组的forEach类似,但区别如下:
// Map的forEach,参数为value、key、map,注意value在前key在后
map.forEach((value, key, map) => console.log(key, value, map))
// Array的forEach,参数为item、index
array.forEach((item, index) => console.log(item, index))
4. WeakMap
与Map的2个区别:
- WeakMap只接受对象作为键名(
null也不行),不接受其他类型的值作为键名。- WeakMap的键名指向的对象,不计入垃圾回收机制。
4个操作方法
get()set()has()delete()
无size属性,WeakMap不可遍历。
无clear()操作方法,无遍历操作。
注:WeakMap弱引用的只是键名,而不是键值。键值依然是正常引用。
const wm = new WeakMap()
let key = {}
let obj = { foo: 1 }
wm.set(key, obj)
obj = null
wm.get(key) // Object { foo: 1 }
(完)