• ES6


    Map对象就是简单的键值对映射。其中的键和值可以使任意值。(ps : 对象的键只能是字符串 )

    1.创建Map实例的两种方法

        //1.
        var map = new Map();
        map.set('one', 1);
        map.set('two', 2);
        map.set('three', 3);
        //...    
    
        //2.
        var map = new Map([['one',1], ['two', 2], ['three', 3]]);
    

    2.键的比较

    键的比较规则:NaN 是与NaN是相同的(虽然NaN !== NaN),除此之外所有的值都根据'==='判断。

        var map = new Map();
        map.set(Number('aa111'), 'isNaN');
        map.set(Number('bb222'), 'also is NaN');
        map.get(NaN);    //'also is NaN'
    

    3.Map VS Object

    • 一个对象通常都有自己的原型,所以一个对象总有一个"prototype"键。不过,从ES5开始可以使用map = Object.create(null)来创建一个没有原型的对象。

    • 一个对象的键只能是字符串或者Symbols,但一个Map的键可以是任意值。

    • 你可以通过size属性很容易地得到一个Map的键值对个数,而对象的键值对个数只能手动确认。

    4.Map属性

    • Map.length 属性length的值为0。

    • Map.prototype 表示Map构造器的原型。允许添加属性从而应用与所有的Map对象。

    5.Map实例 - 所有Map对象的实例都会继承Map.prototype。

    属性

    • Map.prototype.constructor 返回创建给map实例的构造函数,默认是Map函数。

    • Map.prototype.size 返回Map对象的键值对的数量。

        var map = new Map([['one',1], ['two', 2], ['three', 3]]);
        console.log(map.constructor); //function Map() { [native code] }
        console.log(map.size); //3
    

    方法

        //Iterator对象:可以使用for..of进行迭代的对象
        var map = new Map([[1, 'one'],[2, 'two'], [3, 'three']]);
    

    1.Map.prototype.clear() 移除Map对象的所有键值对。

        console.log(map.size);    //3
        map.clear();
        console.log(map.size);    //0
    

    2.Map.prototype.delete(key) 移除任何与键相关联的值,并且返回该值,该值在之前会被Map.prototype.has(key)返回为true。之后再调用则返回false。

        console.log(map.has(1));    //true
        map.delete(1);
        console.log(map.has(1));    //false
    

    3.Map.prototype.entries() 返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的[key, value]数组。

        console.log(map);    //Map {1 => "one", 2 => "two", 3 => "three"}
        map.entries();
        console.log(map);    //Map {1 => "one", 2 => "two", 3 => "three"}
    

    4.Map.prototype.forEach(callbackFn[, thisArg]) 按插入顺序,为Map对象里的每一键值对调用一次callbackFn函数。如果为forEach提供了thisArg,他将在每次回调函数中作为this值。

        map.forEach(function(value, key, mapObj) {
            console.log(value + '---' + key + '---' + mapObj);
            //value - Map对象里每一个键值对的值
            //key - Map对象里每一个键值对的键
            //mapObj - Map对象本身
            console.log(this); //this === window
        });
    
        map.forEach(function(value, key, mapObj) {
            console.log(value + '---' + key + '---' + mapObj);
            console.log(this);    //this === map
        }, map)
    

    5.Map.prototype.get(key) 返回键对应的值,如果不存在,则返回undefined。

        map.get(1); //'one'
    

    6.Map.prototype.has(key) 返回一个布尔值,表示Map实例是否包含键对应的值。

        map.has(1); // true
        map.has(5); //false
    

    7.Map.prototype.keys() 返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的键。

        map.keys();    //MapIterator {1, 2, 3}
    

    8.Map.prototype.set(key, value) 设置Map对象中键的值,返回该Map对象。

        console.log(map.has(4));    //false
        map.set(4, 'four');
        console.log(map.has(4))    //true
    

    9.Map.prototype.values() 返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的值。

        map.values(); //
    

    6.使用for..of方法迭代映射

        var map = new Map();
        map.set(1, 'one');
        map.set(2, 'two');
        for (var [key, value] of map) {
            console.log(key + '---' + value);
        }
        // 1 --- one 2 --- two
        
        for (var key of map.keys()) {
            console.log(key);
        }
        // 1 2
        
        for (var value of map.values()) {
            console.log(value);
        }
        // 'one' 'two'
    
  • 相关阅读:
    ZooKeeper基本原理
    ElasticSearch的基本原理与用法
    Solr与MySQL查询性能对比
    MySQL性能优化总结
    Java并发集合及线程池实现原理
    Java垃圾回收机制
    Java Spring的IoC和AOP的知识点速记
    基于Solr的空间搜索
    系统学习消息队列分享(十) 如何实现高性能的异步网络传输?
    系统学习消息队列分享(九) 如何使用异步设计提升系统性能?
  • 原文地址:https://www.cnblogs.com/dagaoxiaozheng/p/6605981.html
Copyright © 2020-2023  润新知