ES6 Map集合使用

   /**
         * ECMAScript6中的Map集合
         *
         * Map类型是一种存储着许多键值对的有序列表, 其中键名和键值支持所有的数据类型
         * 键名的判断是通过调用 Object.is()方法实现的,所以 5 和 "5" 被判断为两个类型
         *
         */
         let map = new Map();
         map.set("name","song");
         document.write(map.get("name") + "<br/>"); // song
         document.write(map.get("age") + "<br/>"); // undefined

         /**
          * Map集合支持的方法
          *
          * has(key) 检测指定的key是否存在Map集合中
          * delete(key) 从Map集合中移除指定的key键名和值
          * clear() 移除Map集合中所有的键值对
          *
          * */
         document.write(map.has("name") + "<br/>"); // true
         document.write(map.size + "<br/>"); //  1
         // 清空键值对
         map.clear();
         document.write(map.size + "<br/>"); //  0
         map.set("age",1);
         document.write(map.size + "<br/>"); //  1
         // 删除指定键
         map.delete("age");
         document.write(map.size + "<br/>"); //  0

         map.set("name","zhangsan");
         map.set("age",20);

         // 遍历Map
         map.forEach(function(value, key, ownerMap){
             console.log(key + " >>> " + value)
         });

         map.forEach(function(value, key) {
             console.log(key + " >>> " + value)
         });
         // 遍历过程中会按照键插入Map集合的顺序处理

        /**
         *  WeakMap 是弱引用Map集合,也是用于存储对象的弱引用。
         *
         *  WeakMap集合最大的用途是保存Web页面中的DOM元素,使用WeakMap来跟踪DOM元素,当DOM元素消失时,可以自动销毁集合中相关对象
         *
         *  weakMap集合只支持 has() 可以检测给定键值存在性  以及 delete()
         *  不支持 clear()
         */
 
        let weakMap = new WeakMap();
        let element = document.querySelector(".content");
        console.log(element.innerHTML.length); // Hello World
        weakMap.set(element,"original");
        weakMap.get(element);
        console.log(weakMap.has(element)); // true;
        // Person是一个立即调用函数表达式
        var Person = (function(){

            let privateMap = new WeakMap();

            /**
             *  Person的构造使用 WeakMap集合来存放私有数据, 键是this,值是对象包含的私有信息.
             *  只要实例对象被销毁,相关信息也会被销毁,从而保证了信息的私有性。
             *  如果你想使用非对象作为键名,那么普通Map集合时你唯一的选择
             */
            function Person(name) {
                privateMap.set(this,{name:name});
            }

            Person.prototype.getName = function() {
                return privateMap.get(this).name;
            }

            return Person;
        }());

        let p = new Person("song");
        console.log(p.getName());

猜你喜欢

转载自blog.csdn.net/qq_34579060/article/details/91417823
今日推荐