JavaScript | Map 与 Set 类型

介绍 ES6 新出现的 Map 类型与 Set 类型的特性与方法。

目录




Map

Map 是一个键值对的集合,与 Object 的主要的区别是:Map 允许所有数据类型作为键,包括对象。

主要方法

方法 描述
new Map() 创建 map
map.set(key, value) 根据键(key)存储值(value)。支持链式调用
map.get(key) 根据键返回值。若该键不存在,返回 undefined
map.has(key) 若键存在,返回 true,否则返回 false
map.delete(key) 移除该键的值
map.clear() 清空 map
map.size 返回当前元素个数

创建Map

// [key, value] 键值对数组
let map = new Map([
  ['1',  'str1'],
  [1,    'num1'],
  [true, 'bool1']
]);

Object.entries(obj)可以返回对象的键值对数组,利用它可以实现Object到Map的转换。

let object = {
  name: "Haze",
  age: 18
}
let map = new Map( Object.entries(object) );

Set

Set 是一个值的集合,这个集合中所有的值仅出现一次。

主要方法

方法 描述
new Set(iterable) 创建 set,可以利用可迭代对象(如数组)来创建
set.add(value) 添加值,返回 set 自身
set.delete(value) 删除值,若该 value 存在则返回 true ,否则返回 false
set.has(value) 如果 set 中存在该值则返回 true ,否则返回 false
set.clear() 清空 set
set.size 返回当前元素个数

WeakMap 和 WeakSet

WeakMap 和 WeakSet 是 Map 与 Set 的变体。

  • WeakMap 仅允许对象作为键,并且当对象由于其他原因不可引用的时候将其删除。

  • WeakMap 没有 size 属性,没有 clear() 方法,没有迭代器,无法使用keys()、values()等方法。

  • WeakSet 仅存储对象,并且当对象由于其他原因不可引用的时候将其删除。

  • 同样不支持 size/clear() 和迭代器,无法使用keys()。

WeakMap 和 WeakSet 被用作主要对象存储的次要数据结构补充。一旦对象从存储移除,那么存在于 WeakMap/WeakSet 的数据将会被自动清除。

我们可以用在当我们释放对象的时候,同时就能把对应存储在Set/Map里的内存一并释放,而无需手动删除。

上次更新: 2020-3-3 6:09:16 ├F10: PM┤