Loading

07Map与WeakMap类型

  1 <!doctype html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta name="viewport"
  6           content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8     <title>07Map与WeakMap类型</title>
  9 </head>
 10 <body>
 11 <!--7.5 Map类型管理DOM节点-->
 12 <!--<div name = "百度">baidu.com</div>-->
 13 <!--<div name = "新浪">sina.com</div>-->
 14 
 15 <script>
 16     // array、set、map、obj都是引用类型(每个对象独立)。
 17     // 字符串、数字为非引用类型,array(可重复)、set(自动去重)、map(键重复时只保留最后一个)、obj(键(包括引用类型的键)全部转为字符串类型,重复的只保留最后一个)。
 18 
 19 
 20     /*7.1 Map类型特点与创建方法*/
 21     /*7.1.1 对象中的键只能是字符串*/
 22     // let obj1 = {
 23     //     1: "baidu.com",
 24     //     "1": "LiuChang"
 25     // };
 26     // console.log(obj1); // {1: 'LiuChang'}
 27 
 28     // let obj = {
 29     //   name: "baidu.com"
 30     // };
 31     // let name = {
 32     //   [obj]: "xinLang"
 33     // };
 34     // console.log(name[obj]); // xinLang
 35 
 36     /*7.1.2 map中的键可以是任意类型*/
 37     // let map = new Map();
 38     // map.set("name", "baiDu");
 39     // map.set(function(){}, "sina");
 40     // map.set({},"youTube");
 41     // map.set(1,"souHu");
 42     // map.set("1","aiQiYi");
 43     // console.log(map);
 44     // Map(5){'name' => 'baiDu', ƒ => 'sina', {…} => 'youTube', 1 => 'souHu', '1' => 'aiQiYi'}
 45 
 46     /*7.1.3 new map对象时添加数据*/
 47     // let map = new Map([[1,"baiDu"],['1',"sina"]]);
 48     // console.log(map); // Map(2){1 => 'baiDu', '1' => 'sina'}
 49 
 50     /*7.2 Map类型增删改查操作*/
 51     /*7.2.1 增*/
 52     // let obj = {
 53     //     name: "baiDu"
 54     // };
 55     // let map = new Map();
 56     // map.set(obj,"baidu.com");
 57     // console.log(map); // Map(1){{…} => 'baidu.com'}
 58 
 59     /*7.2.2 查*/
 60     // let obj = {
 61     //     name: "baiDu"
 62     // };
 63     // let map = new Map();
 64     // map.set(obj,"baidu.com");
 65     // // 查找某个键
 66     // console.log(map.get(obj)); // baidu.com
 67     // // 判断键是否存在
 68     // console.log(map.has(obj)); // true
 69 
 70     /*7.2.3 删*/
 71     // let obj = {
 72     //     name: "baiDu"
 73     // };
 74     // let map = new Map();
 75     // map.set(obj,"baidu.com");
 76     // // 删除某个键
 77     // // console.log(map.delete(obj),map); // true Map(0){size: 0}
 78     // // 清空map
 79     // console.log(map.clear(), map);       // undefined Map(0){size: 0}
 80 
 81     /*7.3 遍历Map类型数据*/
 82     // let obj = new Map([["百度","baidu.com"], ["新浪","sina.com"]]);
 83     // // 返回所有的键
 84     // console.log(obj.keys());   // MapIterator{'百度', '新浪'}
 85     // // 返回所有的键值
 86     // console.log(obj.values()); // MapIterator{'baidu.com', 'sina.com'}
 87     // // 返回键值对
 88     // console.log(obj.entries()); // MapIterator{'百度' => 'baidu.com', '新浪' => 'sina.com'}
 89     // // for of 方式循环
 90     // // 得到键
 91     // for(let key of obj.keys()) {
 92     //     console.log(key);  // 百度  新浪
 93     // }
 94     // // 得到值
 95     // for (let value of obj.values()) {
 96     //     console.log(value); // baidu.com  sina.com
 97     // }
 98     // // 得到键值
 99     // for (let [key,value] of obj.entries()) {
100     //     console.log(key,value); // 百度 baidu.com  新浪 sina.com
101     // }
102     // // forEach循环
103     // obj.forEach(function (value,key){
104     //     console.log(key,value); // 百度 baidu.com  新浪 sina.com
105     // });
106 
107     /*7.4 Map类型转换操作*/
108     /*7.4.1 map类型转换为数组*/
109     // let obj = new Map([["百度","baidu.com"], ["新浪","sina.com"]]);
110     // console.log([...obj]);  // console.log([...obj.entries()]);
111     /*
112     (2) [Array(2), Array(2)]
113      0: (2) ['百度', 'baidu.com']
114      1: (2) ['新浪', 'sina.com']
115      length: 2
116      [[Prototype]]: Array(0)
117     */
118 
119     // console.log(...obj); // (2)['百度', 'baidu.com'] (2)['新浪', 'sina.com']
120     // console.log([...obj.keys()]);   // (2)['百度', '新浪']
121     // console.log([...obj.values()]); // (2)['baidu.com', 'sina.com']
122 
123     /*7.4.2 map过滤*/
124     // let obj = new Map([["百度","baidu.com"], ["新浪","sina.com"]]);
125     // let newArray = [...obj].filter(item => {
126     //     return item[1].includes("sina.com");
127     // });
128     // console.log(newArray);
129     // /*
130     // [Array(2)]0: (2)['新浪', 'sina.com']length: 1[[Prototype]]: Array(0)
131     // */
132     // let map = new Map(newArray);
133     // console.log(map); // Map(1){'新浪' => 'sina.com'}
134 
135     /*7.5 Map类型管理DOM节点*/
136     // let map = new Map();
137     // document.querySelectorAll('div').forEach((item) => {
138     //     map.set(item,{content: item.getAttribute('name')});
139     // });
140     // console.log(map);  // Map(2){div => {…}, div => {…}}
141     // map.forEach((config, elem) => {
142     //     console.log(config, elem);
143     //     /*
144     //     {content: '百度'}   <div name="百度">baidu.com</div>
145     //     {content: '新浪'}   <div name="新浪">sina.com</div>
146     //     */
147     //     elem.addEventListener('click',() => {
148     //         alert(config.content);
149     //     });
150     // });
151 
152     /*7.6 WeakMap的语法*/
153     // WeakMap的键只能是对象
154     // let map  = new WeakMap();
155     // // 键非引用类型会报错
156     // // map.set("百度","baidu.com");
157     // // 键使用引用类型
158     // map.set(["百度"],"baidu.com");
159     // map.set(["百度"],"baidu.com");
160     // console.log(map); // WeakMap{Array(1) => 'baidu.com', Array(1) => 'baidu.com'}
161 
162     // WeakMap删除和判断元素
163     // let arr = [];
164     // let map = new WeakMap();
165     // map.set(arr,"baidu.com");
166     // console.log(map.has(arr));        // true
167     // console.log(map.delete(arr),map); // true WeakMap{}
168 
169     /*7.7 WeakMap弱引用类型实验*/
170     // 弱类型指,其他引用删除后,WeakMap自动删除。
171     // 由于WeakMap的弱引用性,所以WeakMap不能进行循环遍历等值操作,主要用于保存对象数据。
172     // let obj = {name: "百度"};
173     // let web = obj;
174     // let map = new WeakMap();
175     // // WeakMap不占用内存引用计数器
176     // map.set(obj,"baidu.com");
177     // // 将两个内存引用计数器删除
178     // obj = null;
179     // web = null;
180     // setTimeout(() => {
181     //     console.log(map);
182     // },10000); // WeakMap{}
183 
184 </script>
185 </body>
186 </html>

 

posted @ 2022-08-09 13:46  云起时。  阅读(17)  评论(0编辑  收藏  举报