ECMAScript(通常简称为 JavaScript)是一种广泛使用的编程语言,用于 Web 开发、移动应用开发和其他许多领域。ECMAScript 2018(也称为 ES9)是该语言的最新版本。在这个版本中,引入了一些新的集合类型,使得处理和操作数据更加方便和高效。
Map 类型
Map 类型是一种键值对的集合类型,其中每个键都必须唯一且可以是任意类型(包括对象和函数),每个值也可以是任意类型。可以通过 Map 构造函数或者字面量语法来创建一个 Map 对象:
// 使用构造函数创建一个空的 Map const myMap = new Map(); // 使用字面量语法创建一个包含初始元素的 Map const myOtherMap = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]);
可以使用 size
属性获取 Map 里键值对的数量,使用 set
方法向 Map 中添加新的键值对,使用 get
方法获取指定键的值,使用 has
方法检查 Map 是否包含指定键,使用 delete
方法移除指定的键值对,或者使用 clear
方法移除所有的键值对。
const myMap = new Map(); myMap.set('key1', 'value1'); myMap.set('key2', 'value2'); console.log(myMap.size); // 输出 2 console.log(myMap.get('key1')); // 输出 'value1' console.log(myMap.has('key2')); // 输出 true myMap.delete('key1'); console.log(myMap.size); // 输出 1 myMap.clear(); console.log(myMap.size); // 输出 0
Set 类型
Set 类型是一种无序且不重复的集合类型,其中每个值可以是任意类型(包括对象和函数)。可以通过 Set 构造函数或者字面量语法来创建一个 Set 对象:
// 使用构造函数创建一个空的 Set const mySet = new Set(); // 使用字面量语法创建一个包含初始元素的 Set const myOtherSet = new Set(['value1', 'value2', 'value1']);
可以使用 size
属性获取 Set 里元素的数量,使用 add
方法向 Set 中添加新的元素,使用 has
方法检查 Set 是否包含指定元素,使用 delete
方法移除指定的元素,或者使用 clear
方法移除所有的元素。
const mySet = new Set(); mySet.add('value1'); mySet.add('value2'); console.log(mySet.size); // 输出 2 console.log(mySet.has('value1')); // 输出 true mySet.delete('value1'); console.log(mySet.size); // 输出 1 mySet.clear(); console.log(mySet.size); // 输出 0
WeakMap 和 WeakSet 类型
WeakMap 和 WeakSet 类型是相对于 Map 和 Set 类型的弱引用版本。与 Map 和 Set 不同的是,如果一个键或值不再被其它对象持有,则它们将被自动从 WeakMap 和 WeakSet 中移除,从而避免了内存泄漏问题。
// 使用 WeakMap const myWeakMap = new WeakMap(); const obj1 = {}; const obj2 = {}; myWeakMap.set(obj1, 'value1'); myWeakMap.set(obj2, 'value2'); console.log(myWeakMap.has(obj1)); // 输出 true obj1 = null; // obj1 不再被引用 console.log(myWeakMap.has(obj1)); // 输出 false // 使用 WeakSet const myWeakSet = new WeakSet(); const obj3 = { name: 'Alice' }; const obj4 = { name: 'Bob' }; myWeakSet.add(obj3); myWeakSet.add(obj4); console.log(myWeakSet.has(obj3)); // 输出 true obj3.name = 'Charlie'; // 对象的属性可以被修改 console.log(myWeakSet.has(obj3)); // 输出 true obj3 = null; // obj3 不再被引用 console.log(myWeakSet.has(obj3)); // 输出 false
总结
ECMAScript 2018 引入了一些新的集合类型,包括 Map、Set、WeakMap 和 WeakSet 类型。它们可以帮助我们更加高效地处理和操作数据,并且避免内存泄漏问题。在使用这些集合类型时,需要注意它们的特性和使用方法,从而充分发挥它们的优势,让我们的代码更加简单和可读。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a10799add4f0e0ff92ea4d