Map

  1. 定义:类似与对象的数据结构,实例中的键值可以为任何类型的值:Object、function、String等、基本数据类型都支持;
  2. 声明
let myMap=new Map();
  1. 属性:
    Set.prototype.constructor : 构造函数,返回Set
    Set.prototype.size:返回实例成员的总数。
  2. 方法:
  • 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 是一种叫做字典的数据结构。