#### 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
```