# Set 基本用法

1、`Set` 类似于数组，但是其成员的值都是唯一的，没有重复的值

2、`Set` 本身是一个构造函数，用来生成 `Set` 数据结构

```javascript
const s = new Set()

[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x))

for (let i of s) {
  console.log(i)
}

// 2 3 5 4

```

上面代码通过 `add()` 方法向 `Set` 结构加入成员，结果表明 Set 结构不会添加重复的值。

3、`Set` 可以接受一个数组（或者具有 `iterable` 接口的其他数据结构）作为参数，用来初始化

```javascript
// example 1
const set = new Set([1, 2, 3, 4, 4])
[...set]
// [1, 2, 3, 4]

// example 2
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5])
items.size // 5

// example 3
const set = new Set(document.querySelectorAll('div'))
set.size // 56

// same as:
const set = new Set()
ducoment
  .querySelectorAll('div')
  .forEach(div => set.add('div'))

set.size //56
```

上面的代码中， `example 1` 和 `example 2` 都是 `Set` 函数接受数组作为参数，例三是接受类似数组的对象作为参数

4、向 `Set` 加入值的时候，不会发生类型转换，所以 `5` 和 `'5'` 是两个不同的值

5、向 `Set` 加入 `NaN` 时，认为 `NaN` 等于自身 :zany\_face:&#x20;

6、向 `Set` 加入对象时，认为两个对象总是不相等
