#### Set本身是一个构造函数,用来生成 Set 数据结构。它类似于数组,但是成员的值都是唯一的,没有重复的值。
#### 1、初始化方法:
```
// 1、传入数组、字符串(或者具有 iterable 接口的其他数据结构)初始化
const set = new Set([1, 2, 3]) // Set {1, 2, 3}
const set2 = new Set('hello') // Set {'h', 'e', 'l', 'o'}
// 2、add()方法增加元素
const set2 = new Set()
set2.add(1)
set2.size // 1
```
#### 2、向 Set 加入值的时候,不会发生类型转换,所以`5`和`"5"`是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(`===`),主要的区别是`NaN`等于自身,而精确相等运算符认为`NaN`不等于自身。
```
const set = new Set()
// Set结构中NaN === NaN
set.add(NaN) // size = 1
set.add(NaN) // size = 1
console.log(NaN === NaN) // false
// Set结构中两个空对象不相等
set.add({}) // size = 2
set.add({}) // size = 3
console.log({} === {}) // false
```
#### 3、数组 | 字符串去重
```
// 数组去重
// 1、...扩展运算符
let arr = [...new Set([1,2,1,3,4])] // [1,2,3,4]
// 2、Array.from(Set) 将Set结构转换成数组
let arr2 = Array.from(new Set([1,2,1,3,4])) // [1,2,3,4]
// 字符串去重
let str = [...new Set('abbcc')].join('') // abc
```