Set
- 类似于数组,是值的集合,且其成员值是唯一的,没有重复的值,
- NaN和undefined都可以被存储在Set中,且NaN被视为相同的值,尽管NaN !== NaN
let s = new Set()
s.add(1)
s.add('lonzo')
s.add(true)
s.add(NaN)
s.add(undefined)
与Array相关的操作
```javascript // Array转Set let arr = [1, 4, 5, ‘hello’, true] let s = new Set(arr)
// Set转Array let arr2 = […s]
// 数组去重 let numArr = [1,4,5,6,2,1,5,4] let _numArr = […new Set(numArr)] // [1, 4, 5, 6, 2] ```
Map
类似于对象,也是键值对的集合,但是键值可以是任何类型,不像Object局限于String(或Symbol)
Map与Object的比较
Map | Object | |
---|---|---|
意外的键 | 默认情况下不包含任何键,只包含显示插入的键 | 自身键名可能与其原型链上的键名冲突 |
键的类型 | 任意值 | String或者Symbol |
键的顺序 | 有序的,迭代时按照插入的顺序返回键值 | 无序的 |
键值对的个数 | 可以通过size属性获取 | 只能通过手动计算 |
迭代 | 可以直接被迭代 | 需先获取它的键然后才能迭代 |