介绍
Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。
Set 判断键不同的办法非常独特,根据文档使用了“Same-value-zero equality”的方法,它在===的基础上还保证了NaN等于自身
set其实就是集合的英文名,起到的作用也是模拟一个集合,起到集合的相关特性,比如集合内的元素彼此不相等。因此也很时候用来做集合的运算
Set 结构的实例的属性
Set.prototype.constructor:构造函数Set.prototype.size:返回Set实例的成员总数。
Set 实例的操作方法
Set.prototype.add(value):添加某个值,返回 Set 结构本身。Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。Set.prototype.clear():清除所有成员,没有返回值。
Set 实例的遍历方法
Set.prototype.keys():返回键名的遍历器Set.prototype.values():返回键值的遍历器 由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以keys方法和values方法的行为完全一致。Set.prototype.entries():返回键值对的遍历器entries方法返回的遍历器,同时包括键名和键值,所以每次输出一个数组,它的两个成员完全相等。Set.prototype.forEach():使用回调函数遍历每个成员- 扩展运算符(
...)内部使用for...of循环,所以也可以用于 Set 结构
顺便一提,keys、values、entries的出场频率特别高,map也是这几个。好像是跟迭代器有关
Set的遍历顺序就是插入顺序。
如果想在遍历操作中,同步改变原来的 Set 结构,目前没有直接的方法。但有两种变通方法,一种是利用原 Set 结构映射出一个新的结构,然后赋值给原来的 Set 结构;另一种是利用
Array.from方法。