1. set定义及特征
在js中Set对象允许存储任何类型的唯一值,无论是原始值或者是对象引用。
顶层数据结构不具备key->vakue 特征,内部会自动加index序列
可以存储不同类型的任何数据
如何理解唯一性:对于原始数据类型(Boolean,number,string,null,undefined)如果存储相同值则只会保存一个,对于引用类型做“===”判断即引用地址完全相同则只会存一个。
let set = new Set();
//a,b属于object 值完全相同
let a = {
name:"cc",
age:22
};
let b = {
name:"cc",
age:22
};
//c,d属于number类型 值完全相同
let c = 0,d = 0;
//e,f 属于Date类型,值相同
let e=f = new Date();
set.add(a);
set.add(b);
set.add(c);
set.add(d);
set.add(e);
set.add(f);
a= "abc";
b = {
name:"cc",
age:20
}
set.add(a);
set.add(b);
console.log(set);
2.set 方法
使用场景,数组去重,交集,并集,差集等操作。
size属性: 返回集合的元素个数。(类似数组的长度length)
add(value)方法: 向集合中添加一个元素value。注意:如果向集合中添加一个已经存在的元素,不报错但是集合不会改变。
delete(value)方法: 从集合中删除元素value。
has(value)方法: 判断value是否在集合中,返回true或false.
clear()方法: 清空集合。
3.map
map定义及特征
Map 对象保存键值对,任何值(对象或者原始值)都可以作为一个键或一个值
Map 常用属性及增删改差方法:
size: 属性,取出字典的长度
set(key, value):方法,向字典中添加新元素
get(key):方法,通过键查找特定的数值并返回
has(key):方法,判断字典中是否存在键key
delete(key):方法,通过键 key 从字典中移除对应的数据
clear():方法,将这个字典中的所有元素删除
4.WeakSet
和Set结构类似,也是不重复的值的集合,但是WeakSet的成员只能是对象
WeakSet的API:add()增 delete()删除 has()是否存在
注意:ws没有size属性,不可遍历。因为WeakSet的成员都是弱引用,随时可能消失,成员是不稳定的103.
用处:
1.使用weakSet存储DOM节点,就不用担心节点从文档移除时,会引发内存泄漏(即在被移除的节点上绑定的click事件)
2. 方法对实例的引用,不会被计入内存回收机制,所以删除实例的时候,不用考虑方法,也不会出现内存泄漏。
5.WeakMap
WeakMap与Map的区别:
WeakMap对象是一组键值对的集合,其中的键是弱引用对象,而值可以是任意。
注意:WeakMap弱引用的只是键名,而不是键值。键值依然是正常引用的。
WeakMap 中,每个键对自己所引用对象的引用都是弱引用,在没有其他引用和该键引用同一对象,这个对象将会被垃圾回收(相应的key则变成无效的),所以,WeakMap 的 key 是不可枚举的。