新的数据结构Set和Map
Set
基本概念
Set和Array类似,但是Set里的元素是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成Set数据结构,参数接收一个数组
let set = new Set([1,2,3,4])
去重
Set能去掉重复的值,它判断值是否相等的方法类似于严格相等(===),因此对于引用类型来说只有两个变量地址相同才能被去重。
Set的实例属性和方法
操作方法
add() 添加某个值
delete() 删除某个成员
has() 返回一个布尔值,判断Set中是否包含该成员
clear() 清除所有成员
属性
Set.prototype.size
Set成员数量Set.prototype.constructor
指向构造函数Set
遍历操作
Set.prototype.values()
Set.prototype.keys()
Set.prototype.entries()
Set.prototype.forEach()
遍历的顺序与添加顺序相关
由于Set没有key,因此Set.prototype.keys()
和``Set.prototype.values()`行为相同
前三个方法都是返回遍历器。
Map
基本概念
Map是键值对结构,和Object类似,但是Object只接受字符串或Symbol类型为键名,而Map支持任意类型作为键名。
let map = new Map()
Map的实例属性和方法
属性
Map.prototype.size
Map成员数量Map.prototype.constructor
指向构造函数Map
方法
set(key,value) 设置成员
get(key) 根据键获取值
has(key) 判断是否有次成员
delete(key) 删除成员
clear() 清理所有成员
遍历操作
Set.prototype.values()
Set.prototype.keys()
Set.prototype.entries()
Set.prototype.forEach()
遍历的顺序与添加顺序相关
WeakSet
WeakSet与Set相似,但是有两点不同
WeakSet的成员必须是对象(引用类型)
WeakSet是弱引用
WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
WeakSet只有add
、has
、delete
方法,没有size
属性,并且不能使用任何遍历方法。
WeakMap
WeakMap与Map相似,但是有两点不同。
WeakMap只支持引用类型作为键名,原始类型作为键名会报错
WeakMap是弱引用,WeakMap对对象的引用,不计入垃圾回收机制。
当我们希望对对象存放一些信息时,就可以利用WeakMap弱引用的特点。
这样很不方便,一旦忘记就很容易造成内存泄露。
有了WeakMap后我们可以这样写
注意,WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用。
当键名被垃圾回收时,值也会一起消失。
WeakMap只有set
、has
、delete
和get
方法,没有size
属性,并且不能使用任何遍历方法。
最后更新于