Map
- 定义:类似与对象的数据结构,实例中的键值可以为任何类型的值:Object、function、String等、基本数据类型都支持;
- 声明
let myMap=new Map();
- 属性:
Set.prototype.constructor : 构造函数,返回Set
Set.prototype.size:返回实例成员的总数。 - 方法:
- get:返回键值对
- set:添加键值对,返回实例
- delete:删除键值对,返回布尔值
- has(value):检查值,返回布尔值,表示value是否存在于实例中
- clear:清除实例
- keys:返回以键为遍历器的对象
- values:返回以值为遍历器的对象
- entries:返回以键值为遍历器的对象
- forEach:使用回调函数进行遍历
Set
- 定义:类似于数组,但是Set实例中都是唯一且不能重复的值,Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
- 声明:
使用Set()构造函数,可接受数组实例化
let mySet=new Set();
- 属性:
Set.prototype.constructor : 构造函数,返回Set
Set.prototype.size:返回实例的成员总数 - 常用方法:
- add:添加值,返回实例。
- delete: 删除值,返回布尔值,表示是否添加成功。
- has(value):检查值,返回布尔值,表示value是否存在于实例中。
- clear:清除所有值。
- keys:返回键名的遍历器。
- values:返回键值的遍历器。
- entries:返回键值对的遍历器。
- forEach:使用回调函数遍历每个成员。
- 理解
1)Set的遍历顺序就是插入顺序(有序)。
2)可以理解为Set实例中只包含键值,没有键名(键与值是一样的),所以在使用set.keys方法和set.values方法在行为上是完全一致的。
3)既然Set中的值为唯一值,那我们需要判断它的内部成员是否唯一:
使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是向 Set 加入值时:
- +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
- undefined 与 undefined 是恒等的,所以不重复;
- NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。
Set与Map
从set和map的定义中我们可以看到其共同点和区别
Set 和 Map 主要的应用场景在于 数据重组 和 数据储存。
Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。