当前位置: 代码迷 >> 综合 >> ES6 中 Set集合的使用
  详细解决方案

ES6 中 Set集合的使用

热度:100   发布时间:2023-10-08 18:49:51.0
/*** 全局作用域绑定* let 和 const 和 var 的另一个区别是它们在全局作用域的行为。 当var被作用于全局作用域时,浏览器环境中的* window对象的属性。 这意味着用var很可能会无意覆盖一个已经存在的全局属性* *//*  var RegExp = "Hello";console.log(window.RegExp);var ncz = "Hi!";console.log(window.ncz);*//*** ECMAScript6中的Set集合* Set集合时一种有序列表,其中含有一些相互独立的非重复值,可以通过Set集合快速访问其中的元素** 在set集合中不会对值进行强制的类型转换,数字 5和字符串"5"可以作为两个独立的元素存在*/let set = new Set();set.add(5);set.add("5");console.log(set.size);  // size : 2let key1 = {}, key2 = {};set.add(key1);set.add(key2);// 由于key1和key2不会被转换为字符串,所有在set集合中是独立存在的元素console.log(set.size);  // size : 4// 重复添加会被忽略set.add(5);console.log(set.size); // size : 4let numArray = [1,2,2,3,4,5,5,5];let arraySet = new Set(numArray);console.log(arraySet.size); // size: 5 ====> 1,2,3,4,5// Set集合是否存在let numSet = new Set();numSet.add(5);numSet.add(6);console.log(numSet.has(5));  // trueconsole.log(numSet.has(10)); // false// Set集合移除元素numSet.delete(5);console.log(numSet.has(5));  // false// Set集合清空numSet.add(5);numSet.clear();console.log(numSet.size); // size: 0// Set集合forEachnumSet.add("javaScript");numSet.add("java");numSet.add("python");numSet.forEach(function(value, key, ownerSet){console.log(key + " >> " + value); // 输出的键值一样console.log(ownerSet ===  numSet); // true});// 将Set集合转换为数组set = new Set([1,2,3,3,3,4,5]);let paramArray = [...set];console.log(typeof paramArray); // objectconsole.log(paramArray);/*** Weak Set集合* 将对象存储在Set集合中与存储在变量中是完全一样的,垃圾回收机制就不能释放该对象的内存空间*/let objectKey = new Set();let person = {name : "song",age : 10}objectKey.add(person);// 移除原始索引person = null;console.log(objectKey.size); // size : 1// 重新取回原始引用person = [...objectKey][0];console.log([...objectKey][0].name + " >>> " + [...objectKey][0].age);// 为了解决这个问题,ECMAScript6 引入了WeakSet集合 支持3个方法 add() delete() has()let weak = new WeakSet();// 可以向集合中添加引用weak.add(person);// 判断是否有指定对象的引用console.log(weak.has(person));// 删除引用weak.delete(person);// WeakSet与Set类型的区别, WeakSet保存对象的引用weak.add(person);weak.has(person); //  trueperson = null;    //  此时weakSet已经移除了弱引用了/*** WeakSet集合与普通Set集合的差别** 1. add() 如果传入非对象参数,会报错* 2. weakSet 不可以迭代,不能 for-of* 3. weakSet集合不支持forEach方法* 4. weakSet集合不支持size* 如果你只需要跟踪对象的引用,应该使用WeakSet集合* */// for-of 可以遍历数组和对象let numStr = ["a","b","c"];for (let i of numStr) {console.log(i); // a b c}

 

  相关解决方案