本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Set
Set与数组类似,不同之处在于数组中可含有重复元素,但是Set内是不可含有重复元素的。使用new Set可创建一个set集合,可以通过add的方式向set集合中添加一个元素.
let set=new Set();
set.add(10);
set.add(20);
set.add(10);
console.log(set);//Set(2) { 10, 20 }
不过向里面添加对象的时候需要额外注意一点
let set = new Set();
set.add(10);
set.add({});
set.add({});
console.log(set);//Set(3) { 10, {}, {} }
我们可以看到执行两次set.add({})会像其中添加两个{}对象。这是因为这两次的对象实际上并不是同一个对象,每执行一次set.add({})操作都会在内存中创建一个新的对象,这两个对象的内存地址并不相同。 再来看下面的例子:
let set = new Set();
set.add(10);
let info = {};
set.add(info);
set.add(info);
console.log(set); //Set(2) { 10, {} }
执行set.add(info),info是同一个对象,故只能添加进去一个。 Set的一些方法
let set = new Set();
set.add(10);
let info = {};
set.add(20);
set.add(30);
//size:返回长度
console.log(set.size); //3
// has:判断是否存在,返回布尔值
console.log(set.has(10), set.has(100)); //true false
// delete:删除,返回布尔值
console.log(set.delete(10), set); //true Set(2) { 20, 30 }
// clear:清空
set.clear()
console.log(set); //Set(0) {}
WeakSet
WeakSet与Set类似,不同的是WeakSet是对对象的弱引用,且WeakSet不支持forEach和forof遍历但是Set是可以用这两个进行遍历的。
弱引用与强引用的区别
弱引用和强引用都可以访问所引用的对象,不同之处在于进行垃圾回收的时候垃圾回收器会忽略掉弱引用。就是说,垃圾回收器原本对对象进行回收的时候是通过检查这个对象是否还被引用着,但如果这个对象没有强引用引用着他就算有弱引用引用着这个对象仍旧是会被垃圾回收器回收的。
Map
Map用于存储映射关系,之前我们一直是使用对象来存储映射关系的,不过对象的键只能为string类型,后面es6对象键又允许了Symbol类型。但是Map允许其他的数据类型作为键,比如我们可以使用一个对象作为键。
let map = new Map();
const obj = {
name: "echo"
}
//set(key,value)添加key,value,返回整个map对象
map.set(obj, "aaa");
//size返回长度
console.log(map.size); //1
//has:判断该map中是否包含,返回布尔值
console.log(map.has(obj)); //true
//get:得到指定key对应的value,返回value
// delete:删除指定key值对应的映射,返回布尔值
console.log(map.delete(obj), map); //true Map(0) {}
map.set(obj, "aaa");
//clear:清空map
map.clear();
console.log(map); //Map(0) {}
WeakMap
WeakMap与Map的区别在于 1.WeakMap的key只能使用对象 2.WeakMap的key对象对对象的引用是弱引用。