一。怎么用

const m = new Map();
        console.log(m);//{size: 0}
        m.set('a', 1);//添加键、值
        m.set('b', 2);
        console.log(m);//{'a' => 1, 'b' => 2}

二。和对象比较,对象键一般是字符串;Map的键可以是五种基本型和引用型:对象([],函数,{},set实例,map实例等)

ES6 Map 双向查询 es6中的map方法_回调函数

 

 三。方法

1.set方法,添加键值对,如果键已经存在,后添加的键值对覆盖已有的,且可以连续打点调用

注意:这里的覆盖性和set的不允许重复值的区别,不允许重复值是只要已有a成员,不允许出现和a成员全等的成员

2.get方法,参数里面写map实例的键名,返回值是键对应的值,如果参数写了一个map实例中不存在的键名,会返回undefined;

        const m = new Map();

        console.log(m.set('a', 1));//调用方法返回的是m(已经通过该方法添加过键值对的m)(可以连续打点调用的原因)

        console.log(m);//{'a' => 1}

        m.set('c', 3).set('b', 2);

        console.log(m);//{'a' => 1, 'c' => 3, 'b' => 2}

        console.log(m.get('a'));//1

 

3.forEach方法,有几个键值对,回调函数就被调用几次;

const m = new Map();
        m.set('a', 1).set('b', 2);
        console.log(m);
        m.forEach(function (value, key, map) {
            console.log(value, key, map);//第1,2,3个参数分别代表值,键,该map实例,且map和m是同一引用地址
        });

打印结果如图:

ES6 Map 双向查询 es6中的map方法_ES6 Map 双向查询_02

第二个参数不传时this的情况

'use strict'
        const m = new Map([['a', 1], ['b', 2], ['a', 3]]);
        m.forEach(function () {
            console.log(this);//undefined 这里并没有在use strict下写调用回调函数的代码,因为是forEach是内置方法,forEach里面封装的函数体会调用这个回调函数
            //所以只要把定义函数写在use strict下就遵守严格模式this的指向
            //程序会看看是谁调用的,再看看函数是不是定义在严格模式下(有没有use strict)再确定函数的this
        })

 

4.has方法:判断是否有这个属性,参数写键名,返回布尔值;

5.delete方法:参数写键名,把该键值对删除,如果写的键名在该实例中不存在,那么什么也不会发生也不会报错;

6.clear方法:清空实例里面的键值对;

四。size属性

实例.szie:返回该实例里有几个键值对

五。Map构造函数的参数(只能传一个参数)

1.数组:只能传二维数组,且必须体现键值对

const m = new Map([['a', 1], ['b', 2], ['c', 3]]);
        console.log(m);//{'a' => 1, 'b' => 2, 'c' => 3}

2.set和map实例

        const s = new Set([['a', 1], ['b', 2], ['c', 3]]);

        console.log(s); { ['a', 1], ['b', 2], ['c', 3] }

        const m = new Map(s);

        console.log(m);//{'a' => 1, 'b' => 2, 'c' => 3}//和传二维数组同理

        const m1 = new Map(m);//参数是map实例时,相当于复制了这个map实例,且地址不同

        console.log(m1);//{'a' => 1, 'b' => 2, 'c' => 3}

 

3.注意:构造函数传递参数添加键值对的方式,同样重复的键会覆盖

const m = new Map([['a', 1], ['b', 2], ['a', 3]]);
        console.log(m);//{'a' => 3, 'b' => 2}

六。判断键名是否相同的方式,遵循===,map实例中NaN===NaN