es6 学习笔记(三)

Set

定义

  1. new Set([1,2,3,4])
    【注】:
    添加进的时候,不进行类型转换,内部是在===的基础上进行了补充(NaN===NaN)。
    因此

    5和”5”是两个不同的值
    两个空对象可以同时加入
    NaN只能添加一个

用途:

数组去重

1
[...new Set(array)]

方法

  1. 操作方法

  2. 遍历方法
    对象的是Object.keys()
    set是set1.keys(),同set1.values()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    let set1 = new Set(['red', 'green', 'blue']);
    //返回值相同
    for(let item of set1.keys())
    for(let item of set1.values())
    for(let item of set1)
    for (let item of set.entries()) {
    console.log(item);
    }
    // ["red", "red"]
    // ["green", "green"]
    // ["blue", "blue"]
  3. 用途

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let a = new Set([1, 2, 3]);
    let b = new Set([4, 3, 2]);
    // 并集
    let union = new Set([...a, ...b]);
    // Set {1, 2, 3, 4}
    // 交集
    let intersect = new Set([...a].filter(x => b.has(x)));
    // set {2, 3}
    // 差集
    let difference = new Set([...a].filter(x => !b.has(x)));
  4. 遍历的同时进行改变

    1
    2
    3
    4
    5
    6
    7
    8
    // 方法一
    let set = new Set([1, 2, 3]);
    set = new Set([...set].map(val => val * 2));
    // set的值是2, 4, 6
    // 方法二
    let set = new Set([1, 2, 3]);
    set = new Set(Array.from(set, val => val * 2));

weakset

与set的区别在于,它的成员只能是对象,也就是说,即使是通过new WeakSet(arr)定义的,arr的成员才是weakset的成员,因此如果arr只是【1,2】这种,是不行的。

接受一个数组或类似数组的对象作为参数

  • 方法
    操作:比set少clear()方法,没有forEach,没有size属性
    遍历:成员不可遍历

不是很明白的点:
弱引用


Map


比传统的Object更为拓展,key不限于字符串

使用

1
2
3
4
5
6
var m = new Map()
map.set(key,value)
//
也接受以数组作为参数
var m = new Map([[k1,v1],[k2,v2],[]])

注意

  • 对一个key多次赋值,会覆盖
  • 未知key,返回undefined
  • key与内存地址绑定,所以比较key的时候实际上是按引用来看的

属性和方法

set中是add delete clear has.
map中是set delete clear get

  • 操作方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //set 返回map自身,因此可以链式调用
    m.set("edition", 6) // 键是字符串
    m.set(262, "standard") // 键是数值
    m.set(undefined, "nah")
    //get 未知则undefined
    m.get('')
    //has(key),clear()
  • 遍历方法
    keys.values() entries() forEach().同set的

    1
    2
    3
    4
    5
    6
    7
    8
    for (let [key, value] of map.entries()) {
    console.log(key, value);
    }
    // 等同于使用map.entries()
    for (let [key, value] of map) {
    console.log(key, value);
    }

转数组

1
2
3
4
5
6
7
8
9
10
11
[...map.keys()]
// [1, 2, 3]
[...map.values()]
// ['one', 'two', 'three']
[...map.entries()]
// [[1,'one'], [2, 'two'], [3, 'three']]
[...map]
// [[1,'one'], [2, 'two'], [3, 'three']]

与其他类型的转换

  • 数组
  • 对象
  • json
    具体见教程

weakmap

跟weakset差不多


异步及async