文章目录
set集合里面可以存储 任意类型值,但是这些值都是 唯一的
【特殊值】: NAN, undefined 和 +0 -0只能存一个
console.log(0 === -0); //true
console.log(undefined === undefined); //true
console.log(NaN === NaN); //false
一、add() 添加数据
//set集合在写的时候 需要实例化
let setarr=new Set();
//使用add方法 添加数据
setarr.add(1);
setarr.add("a");
setarr.add(function () {});
setarr.add({a:1});
setarr.add({a:1}); //因为是引用类型 其实存的并不是一个值
二、类型转换
1.数组array转换为Set集合
let a=[1,2,3,3,2,1];
let set=new Set(a);
console.log(set);
2.Set转数组
let arr= [...set];
console.log(arr);
3.String 转 Set
字符串,相当于类数组。有的人认为是值类型,也有人认为是引用类型。
var myset=new Set('hello');
console.log(myset);
4.Set 转 String
集合先转为数组,再进行拼接
var str= [...myset].join("");
console.log(str); //helo
【注意】不能使用toString
【注意】Set 中 toString 方法是不能将 Set 转换成 String的
let mystr=myset.toString();
console.log(mystr); //[object Set]
JSON对象直接toString()也是这个格式,要用JSON.parse来转
三、Set 对象作用
1.数组去重
var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]
2.并集 数组合并
let s1=new Set([1,2,3]);
let s2=new Set('abcde');
let s3=new Set([...s1,...s2]);
console.log(s3);
3.add添加 size返回长度
let set=new Set([0]);
set.add(1);
set.add(2);
set.add(3);
console.log(set); //Set(4) {0, 1, 2, 3}
console.log(set.size); //4
4.has 监测值是否存在
console.log(set.has(2)); //true
5.delete 删除某个值
console.log(set.delete(2)); //true
console.log(set); //Set(3) {0, 1, 3}
6.clear 清除所有成员
console.log(set.clear()); //undefined
console.log(set);//Set(0) {}
四、Set 遍历方法
set中存在迭代器,故可遍历
1.keys() 返回键名的遍历器
因为set没有键名,故返回它本身
let set=new Set([1,2,3,4,5,6]);
console.log(set.keys());
2.values()
console.log(set.values()); //SetIterator {1, 2, 3, 4, 5, …}
3.entries()
console.log(set.entries());
4.forEach()
set.forEach(function (value,key,arr) {
console.log(value, key, arr);
})
5.for…of
for(let key of set.values()){
console.log(key);
}
for(let [key,value] of set.entries()){
console.log(key,value);
}
weakSet weakMap
和set集合 map集合 具有功能相同的两个集合
weakSet(只接受对象做值) weakMap(只接受对象做key)
一旦不再需要,对象被清除,js垃圾回收机制回默认回收(set map不会)