返回

Set, Map, WeakSet, WeakMap:ES6中的新型数据结构

前端

Set:无序且唯一元素集合

Set是一种无序且仅包含唯一元素的数据结构。这意味着Set中的元素不会重复,并且元素的顺序是任意的。Set通常用于存储唯一值,例如用户ID或产品名称。

要创建Set,可以使用new Set()方法。例如:

const set = new Set([1, 2, 3, 4, 5]);

要向Set中添加元素,可以使用add()方法。例如:

set.add(6);

要从Set中删除元素,可以使用delete()方法。例如:

set.delete(3);

要检查Set中是否包含某个元素,可以使用has()方法。例如:

set.has(2); // true

Map:键值对集合

Map是一种键值对数据结构。这意味着Map中的每个元素都是一个键值对,其中键是唯一的,值可以是任何类型的数据。Map通常用于存储相关的数据,例如用户ID和用户名、产品ID和产品名称。

要创建Map,可以使用new Map()方法。例如:

const map = new Map([
  ['John', 'Doe'],
  ['Jane', 'Smith'],
  ['Bob', 'Jones']
]);

要向Map中添加键值对,可以使用set()方法。例如:

map.set('Alice', 'Cooper');

要从Map中删除键值对,可以使用delete()方法。例如:

map.delete('Bob');

要获取Map中某个键对应的值,可以使用get()方法。例如:

map.get('John'); // 'Doe'

WeakSet:无序且仅包含对象元素的集合

WeakSet是一种无序且仅包含对象元素的数据结构。这意味着WeakSet中的元素必须是对象,并且元素不会被垃圾回收机制回收。WeakSet通常用于存储DOM元素或其他可能被垃圾回收机制回收的对象。

要创建WeakSet,可以使用new WeakSet()方法。例如:

const weakSet = new WeakSet();

要向WeakSet中添加对象,可以使用add()方法。例如:

weakSet.add(document.body);

要从WeakSet中删除对象,可以使用delete()方法。例如:

weakSet.delete(document.body);

要检查WeakSet中是否包含某个对象,可以使用has()方法。例如:

weakSet.has(document.body); // true

WeakMap:键值对集合,键必须是对象,值可以是任何类型的数据

WeakMap是一种键值对数据结构,键必须是对象,值可以是任何类型的数据。这意味着WeakMap中的键不会被垃圾回收机制回收,但值可能会被垃圾回收机制回收。WeakMap通常用于存储对象之间的关系,例如DOM元素和事件侦听器。

要创建WeakMap,可以使用new WeakMap()方法。例如:

const weakMap = new WeakMap();

要向WeakMap中添加键值对,可以使用set()方法。例如:

weakMap.set(document.body, 'body');

要从WeakMap中删除键值对,可以使用delete()方法。例如:

weakMap.delete(document.body);

要获取WeakMap中某个键对应的值,可以使用get()方法。例如:

weakMap.get(document.body); // 'body'

Set、Map、WeakSet和WeakMap的区别

数据结构 顺序 垃圾回收
Set 唯一
Map 唯一 任意
WeakSet 对象 对象
WeakMap 对象 任意

总结

Set、Map、WeakSet和WeakMap是ES6中引入的四种新的数据结构,它们为JavaScript开发人员提供了新的工具来存储和操作数据。Set用于存储唯一值,Map用于存储键值对,WeakSet用于存储对象,WeakMap用于存储对象之间的关系。这些数据结构都有各自的优缺点,开发人员可以根据具体的需求来选择使用哪种数据结构。