0
点赞
收藏
分享

微信扫一扫

06Set与WeakSet类型

斗米 2022-08-31 阅读 33

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

 



举报

相关推荐

0 条评论