Loading

06Set与WeakSet类型

  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>06Set与WeakSet类型</title>
  9 </head>
 10 <body>
 11 <script>
 12     /*6.1 set的基本使用*/
 13     // 与数组类似都是严格类型约束的引用类型,但set是不能放重复的数据
 14     // let array = [1,2,1,2,"1"];
 15     // console.log(array); //(5)[1, 2, 1, 2, '1']
 16     // let set = new Set([1,2,1,2,"1"]);
 17     // console.log(set);   //Set(3){1, 2, '1'}
 18     //
 19     // // 补充: 对象中属性都会转为字符串并覆盖同名属性
 20     // let obj = {
 21     //     1: "baidu",
 22     //     "1": "xinLang",
 23     // };
 24     // console.log(obj); //{1: 'xinLang'}
 25 
 26     /*6.2 Set元素检测与管理*/
 27     // let set = new Set("baidu");
 28     // console.log(set);  // Set(5){'b', 'a', 'i', 'd', 'u'}
 29 
 30     /*6.2.1 检测set元素的个数*/
 31     // let set = new Set(["xinLang","baiDu"]);
 32     // console.log(set.size); // 2
 33 
 34     /*6.2.2 检测指定的set元素是否存在*/
 35     // let set = new Set(["xinLang","baiDu"]);
 36     // console.log(set.has("baiDu")); // true
 37 
 38     /*6.2.3 往set中添加元素*/
 39     // let set = new Set(["xinLang","baiDu"]);
 40     // console.log(set.add("souHu")); // Set(3){'xinLang', 'baiDu', 'souHu'}
 41 
 42     /*6.2.2 从set中删除元素*/
 43     // let set = new Set(["xinLang","baiDu"]);
 44     // console.log(set.delete("baiDu"), set); // true Set(1){'xinLang'}
 45 
 46     /*6.2.2 清除set中的元素*/
 47     // let set = new Set(["xinLang","baiDu"]);
 48     // console.log(set.clear(), set);   // undefined Set(0){size: 0}
 49 
 50     /*6.3 类型之间互相转换*/
 51     /*6.3.1 将set转换为数组*/
 52     // let set = new Set(["xinLang","baiDu"]);
 53     // console.log(Array.from(set)); // (2)['xinLang', 'baiDu']
 54 
 55     /*6.3.1 将set中大于5的值移除*/
 56     // let set = new Set("123456789");
 57     // let array = [...set].filter(function(item) {
 58     //    return item < 5;
 59     // });
 60     // set = new Set(array);
 61     // console.log(set); // Set(4){'1', '2', '3', '4'}
 62 
 63     /*6.3.1 将array中重复的元素移除*/
 64     // let array = [1,2,3,4,5,2,3,1];
 65     // let set = new Set(array);
 66     // array = Array.from(set);
 67     // console.log(array); // (5)[1, 2, 3, 4, 5]
 68 
 69     /*6.4 遍历Set类型*/
 70     /*6.4.1 set没有键名只有键值,键名和键值一样*/
 71     // let set = new Set(["xinLang","baiDu"]);
 72     // console.log(set.keys());   // SetIterator{'xinLang', 'baiDu'}
 73     // console.log(set.values()); // SetIterator{'xinLang', 'baiDu'}
 74     // console.log(set.entries());
 75     /*
 76     SetIterator{'xinLang' => 'xinLang', 'baiDu' => 'baiDu'}
 77     */
 78 
 79     /*6.4.2 set遍历*/
 80     // let set = new Set(["xinLang","baiDu"]);
 81     // set.forEach(function (value,key,arr){
 82     //     console.log(value,key,arr);
 83     // });
 84     /*
 85     xinLang xinLang Set(2){'xinLang', 'baiDu'}
 86     baiDu baiDu Set(2){'xinLang', 'baiDu'}
 87     */
 88 
 89     // let set = new Set(["xinLang","baiDu"]);
 90     // for (let value of set) {
 91     //     console.log(value);
 92     // }
 93     /*
 94     xinLang
 95     baiDu
 96     */
 97 
 98     /*6.5 并集-交集-差集*/
 99     /*6.5.1 并集*/
100     // let a = new Set([1,2,3,4,5]);
101     // let b = new Set([4,5,2,9]);
102     // console.log(new Set([...a,...b])); // Set(6){1, 2, 3, 4, 5, 9}
103 
104     /*6.5.2 交集*/
105     // let a = new Set([1,2,3,4,5]);
106     // let b = new Set([4,5,2,9]);
107     // console.log(
108     //     new Set([...a].filter(function(item){
109     //             return b.has(item);
110     //         }
111     //     ))
112     // ); //Set(3){2, 4, 5}
113 
114     /*6.5.3 差集*/
115     // let a = new Set([1,2,3,4,5]);
116     // let b = new Set([4,5,2,9]);
117     // console.log(
118     //     new Set([...a].filter(function(item){
119     //             return !b.has(item);
120     //         }
121     //     ))
122     // ); //Set(2){1, 3}
123 
124     /*6.6 WeakSet语法*/
125     // 和set大体上差不多,WeakSet的值必须是引用类型的
126     // const a = new WeakSet([1,2,3,4]); //报错
127 
128     // 可以通过add方法往里面追加,也可以使用delete,has等方法
129     // const b = new WeakSet();
130     // b.add([1,2,3,4,5]);
131     // console.log(b);   // WeakSet{Array(5)}
132 
133     /*6.7 引用类型的垃圾回收原理*/
134     /*6.7.1 引用类型常规使用方法*/
135     // let a = [1,2,3];
136     // let b = a;
137     // b[3]=4;
138     // console.log(a,b);
139     /*
140     (4)[1, 2, 3, 4]
141     (4)[1, 2, 3, 4]
142     */
143 
144     /*6.7.2 引用类型变量的垃圾回收*/
145     // let a = [1,2,3];
146     // let b = a;
147     // b[3] = 4;
148     // b = null;
149     // console.log(a,b); //(4)[1, 2, 3, 4] null
150     // a = null;
151     // console.log(a,b); //null null
152 
153     /*6.8 WeakSet弱引用特性*/
154     // 弱类型指,其他引用删除后,WeakSet自动删除。
155     // 由于WeakSet的弱引用性,所以WeakSet不能进行循环遍历等值操作,主要用于保存对象数据。
156     // let info = {name: "baidu"};
157     // let name = info;
158     // let set = new WeakSet();
159     // // WeakSet不占用内存引用计数器
160     // set.add(info);
161     // // 将两个内存引用计数器删除
162     // info = null;
163     // name = null;
164     // setTimeout(() => {
165     //     console.log(set);
166     // },10000);
167     /*
168     WeakSet{}[[Entries]]No properties[[Prototype]]: WeakSet
169     */
170 
171 </script>
172 </body>
173 </html>

 

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