ES6新特性:深入解析Set与Map数据结构
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,可以显著提高代码的效率和可读性。
2018-09-16 上传
2020-07-05 上传
2020-10-16 上传
2020-12-02 上传
2021-01-20 上传
2020-11-28 上传
2020-10-17 上传
2020-10-15 上传
点击了解资源详情
weixin_38730977
- 粉丝: 5
- 资源: 873
最新资源
- cl-bmp-开源
- Apk-Extractor:它是一个安卓应用程序,它生成已安装应用程序的 apks 并生成当前安装在手机中的所有应用程序的列表
- New Blue Pill深入理解硬件虚拟机源码下载
- 基于Scala的Spark学习项目设计源码
- 实验3_按键计数器.rar
- vscode-emacs-tab
- cnvcl_cnpack_cnvcl_
- 软考高级架构师相关资料.zip
- Java课程设计-基于Java swing的图书管理系统(源码+数据库+安装配置说明).rar
- Draggz-Chrome-Extension-Drag-Drop
- 六自由度Stewart平台的matlab模拟与仿真【包括程序操作视频】
- zuul-samples:使用 OAuth 2.0 的各种示例项目
- 行业文档-设计装置-种子纸.zip
- 剪跨比_safeiss_ansys_
- SynchroMike:后继者: syncarus.net-开源
- 基于ASP.NET教学辅助系统设计与实现(源代码 论文).rar