ECMAScript 2018(ES9)中的集合类型简介

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


纠错反馈