Set, Map, WeakSet, WeakMap:ES6中的新型数据结构
2023-12-26 18:02:22
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用于存储对象之间的关系。这些数据结构都有各自的优缺点,开发人员可以根据具体的需求来选择使用哪种数据结构。