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>