Set 数据集合:

Set 集合是一种无重复元素的列表,使用 new Set()方法创建 Set 集合
//向集合添加 5 个元素,只有四个有效,并且2 和字符串’2’不冲突,空对象也不冲突
// let set=new Set();
// set.add(1);
// set.add(2);
// set.add(2);
// set.add("2");
// set.add("c");
// // console.log(set);//Set(0) {}
// console.log(set);//Set(4) { 1, 2, '2', 'c' }
console.log(set.size);

//可以通过构造函数传递参数的方式进行初始化集合
//通过构造参数初始化集合
// let set=new Set([1,2,3,4,5,6]);
// console.log(set);//Set(6) { 1, 2, 3, 4, 5, 6 }

// 使用 has()方法查找是否存在指定元素,注意 2 和’2’是两个元素,不会隐式转换
// console.log(set.has(2));//true
// console.log(set.has("2"));//false

//用 delete()删除指定元素、clear()清空元素
// set.delete(2);//删除元素
// console.log(set);//Set(5) { 1, 3, 4, 5, 6 }
// set.clear()//清空
// console.log(set);//Set(0) {}

//使用...语法,将 Set集合转换为数组
let set=new Set([1,2,3,4,5,6]);
//将 set 集合转换为数组
// let arr=[...set];
// console.log(arr);//[ 1, 2, 3, 4, 5, 6 ]

//使用 for 或者 forEach 来遍历 Set 集合
// for(let i of set){
//     console.log(i);//1    2    3    4    5    6
// }

//forEach 变量
//在 Set 集合中 key 和 value 都是值
// set.forEach(function(key,value,set){
//     console.log(key+'-'+value);
//     console.log(set);
// });

// Set 集合还提供针对对象的 Weak Set 集合,添加非对象类型会报错;
// Weak Set 集合支持 add()、has()和 delete()方法, 不支持遍历,内部隐藏(无法查看内容),不支持 foreach 和 size;
// 对于应用场景来说,存放对象的弱引用,不用担心对象被回收后引发的问题
//强引用
let set=new Set(),obj={1:1};
set.add(obj);
console.log(set);//Set(1) { { '1': 1 } }  引用存在
//移除引用
obj=null;
console.log(set);//Set(1) { { '1': 1 } }  引用仍然存在

//弱引用
let ws=new WeakSet(),obj={1:1};
ws.add(obj);
console.log(ws.has(obj));//true 引用存在
//移除引用
obj=null;
console.log(ws.has(obj));//false 随着销毁而释放

Map数据合集:

//Map 数据集合,是一种以键值对存储的有序列表
let map=new Map();
map.set("name","苏玮一");//支持set添加
map.set('age', 100);
console.log(map);//Map(2) { 'name' => '苏玮一', 'age' => 100 }
console.log(map.size);//2
console.log(map.get('name')); //.get 获取

//通过构造函数传递参数的方式进行初始化集合
//通过构造参数初始化集合
// let map=new Map([
//     ["name","苏玮一"],
//     ['age', 100]
// ]);
// console.log(map);//Map(2) { 'name' => '苏玮一', 'age' => 100 }

//使用 has()检测、delete()删除、clear()清空等对 Map 集合的操作;
// console.log(map.has('name')); //true
// console.log(map.size); //2
// map.delete('name'); //删除
// console.log(map);
// map.clear(); //清空
// console.log(map);

//使用 forEach 来遍历 Map 集合
map.forEach((value, key, m) => {
    console.log(key + '-' + value);
    console.log(m);
});

//
//弱引用
let wm = new WeakMap(),
obj = {};
wm.set(obj)
console.log(wm.has(obj));//true
//移出引用
obj = null;
console.log(wm.has(obj));//回收了 false