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 }
(完)
网友评论