ES6 引入了四种新的集合类型:Map、Set、WeakMap 和 WeakSet。它们提供了一种更加灵活和高效的存储和管理数据的方式。本文将介绍这四种集合类型的使用方法和适用场景,并提供相应的示例代码。
Map
Map 是一种键值对的集合类型,其中每个键都唯一对应一个值。Map 可以使用任何类型的值作为键和值,包括原始类型和对象。Map 中的键和值可以通过 set
方法添加,通过 get
方法获取,也可以通过 has
方法判断是否存在。Map 还提供了 size
属性用于获取集合中键值对的数量。
示例代码
// 创建一个空的 Map const myMap = new Map(); // 添加键值对 myMap.set('name', 'John'); myMap.set('age', 30); // 获取值 console.log(myMap.get('name')); // 'John' // 判断是否存在 console.log(myMap.has('age')); // true // 获取集合中键值对的数量 console.log(myMap.size); // 2
Set
Set 是一种无序且唯一的集合类型,其中每个元素都唯一。Set 可以使用任何类型的值作为元素,包括原始类型和对象。Set 中的元素可以通过 add
方法添加,通过 has
方法判断是否存在,也可以通过 delete
方法删除。Set 还提供了 size
属性用于获取集合中元素的数量。
示例代码
// 创建一个空的 Set const mySet = new Set(); // 添加元素 mySet.add('apple'); mySet.add('banana'); mySet.add('apple'); // 重复添加无效 // 判断是否存在 console.log(mySet.has('banana')); // true // 删除元素 mySet.delete('apple'); // 获取集合中元素的数量 console.log(mySet.size); // 1
WeakMap
WeakMap 是一种键值对的集合类型,其中每个键必须是对象,而值可以是任何类型的值。与 Map 不同的是,WeakMap 中的键是弱引用的,也就是说,如果键对象被垃圾回收了,对应的键值对也会自动被删除。因此,WeakMap 主要用于存储临时数据或私有数据,以避免内存泄漏。
示例代码
// 创建一个空的 WeakMap const myWeakMap = new WeakMap(); // 创建一个对象作为键 const key = {}; // 添加键值对 myWeakMap.set(key, 'value'); // 获取值 console.log(myWeakMap.get(key)); // 'value' // 键对象被垃圾回收后,键值对也会自动被删除 key = null; console.log(myWeakMap.get(key)); // undefined
WeakSet
WeakSet 是一种无序且唯一的集合类型,其中每个元素必须是对象。与 Set 不同的是,WeakSet 中的元素是弱引用的,也就是说,如果元素对象被垃圾回收了,对应的元素也会自动被删除。因此,WeakSet 主要用于存储临时数据或私有数据,以避免内存泄漏。
示例代码
// 创建一个空的 WeakSet const myWeakSet = new WeakSet(); // 创建一个对象作为元素 const obj = {}; // 添加元素 myWeakSet.add(obj); // 判断是否存在 console.log(myWeakSet.has(obj)); // true // 元素对象被垃圾回收后,元素也会自动被删除 obj = null; console.log(myWeakSet.has(obj)); // false
总结
ES6 中的集合类型提供了一种更加灵活和高效的存储和管理数据的方式。Map 和 Set 可以用于存储任何类型的值,而 WeakMap 和 WeakSet 则主要用于存储临时数据或私有数据,以避免内存泄漏。在使用集合类型时,应根据实际需求选择合适的类型,并注意避免出现内存泄漏等问题。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658c0774eb4cecbf2d15c080