ES6新特性:深入解析Set与Map数据结构

1 下载量 16 浏览量 更新于2024-08-31 收藏 87KB PDF 举报
"ES6学习笔记之Set和Map数据结构详解" 在JavaScript的ES6标准中,引入了两种新的数据结构——Set和Map,这极大地丰富了JavaScript的数据处理能力。本篇学习笔记将深入探讨这两个数据结构的特点和用法。 ### 一、Set数据结构 Set是一种特殊的数组,它的所有成员都是唯一的,不允许重复。Set作为一个构造函数,可以用于创建Set实例。 #### 1. 初始化Set 创建Set实例时,可以传入一个数组或类似数组的对象来初始化成员。例如: ```javascript var s = new Set(); // 创建一个空Set var set = new Set([1, 2, 3, 4, 4]); // 创建包含1, 2, 3, 4的Set,重复的4会被忽略 ``` #### 2. Set的基本操作 - `add(item)`: 向Set中添加一个元素,如果元素已存在,不会执行任何操作。 - `has(item)`: 检查Set中是否存在指定元素,返回布尔值。 - `delete(item)`: 删除Set中的指定元素,如果不存在该元素,也不会抛出错误。 - `clear()`: 清空Set中的所有元素。 - `size`: 属性,返回Set中元素的数量。 例如: ```javascript var set = new Set(); set.add(window); // 添加window对象 set.has(window); // true set.size; // 1 set.add(window); // 不做任何操作,因为window已经存在 set.add(1); // 添加数字1 set.size; // 2 set.delete(window); // 删除window set.has(window); // false set.clear(); // 清空Set set.size; // 0 ``` 注意,Set中的比较是严格相等,即`===`,因此不同类型的值(如5和"5")以及NaN(在Set中是唯一的)被视为不同的元素。 ### 二、Map数据结构 Map不同于普通的对象,它允许键为任意类型,并且每个键都对应一个值。与Set相比,Map更加灵活,可以用于存储键值对。 #### 1. 初始化Map 创建Map实例时,同样可以传入一个数组的数组,每对元素构成键值对: ```javascript var map = new Map([['key1', 'value1'], ['key2', 'value2']]); ``` #### 2. Map的基本操作 - `set(key, value)`: 设置键值对。 - `get(key)`: 获取指定键对应的值。 - `delete(key)`: 删除指定键的键值对。 - `has(key)`: 检查Map中是否存在指定的键。 - `clear()`: 清空Map的所有键值对。 - `size`: 属性,返回Map中键值对的数量。 #### 3. 遍历Map Map可以通过`for...of`循环遍历,也可以使用`entries()`、`keys()`和`values()`方法分别获取键值对、键和值的迭代器。 例如: ```javascript var map = new Map(); map.set('name', 'Alice'); map.set('age', 30); for (let pair of map) { console.log(pair); } // 输出:[ 'name', 'Alice' ], [ 'age', 30 ] map.entries(); // 迭代器,返回键值对 map.keys(); // 迭代器,返回键 map.values(); // 迭代器,返回值 ``` ### 结语 Set和Map的引入,使得JavaScript在处理唯一值和键值对时有了更强大的工具。它们在处理数据去重、存储和查找关系等方面具有广泛的应用,是现代JavaScript开发中不可或缺的一部分。理解和熟练运用Set和Map,可以显著提高代码的效率和可读性。