set和map的区别是啥(Map 和 Set 的使用及区别)
今天的文章主要是给大家讲讲这两个合集的使用方法以及注意事项和区别。可能有些小伙伴对这两本合集并不陌生,但是多看书加深印象总是对的。一起来看看吧。.
Map以key-value的形式存储键值对,其中key和value可以是任意类型,即对象也可以作为键。这比使用对象来模拟要灵活得多
地图创建和初始化
您可以使用 new Map() 构造函数创建一个空的 Map
// 创建一个空地图
让地图=新地图();
您还可以在 Map() 构造函数中传递一个数组来创建和初始化一个 Map。传入的数组是一个二维数组,每个子数组有两个元素,前者作为key,后者作为value,这样就形成了key-value键值对。例如:
// 使用数组创建非空Map
let array = [ // 定义一个二维数组,数组中的每个孩子都有两个元素
['key1' , 'value 1'], // key是字符串“key1”,value是字符串“value 1”
[{} , 10086] , // key是一个对象,value是值10086
[ 5, {} ] // key为数值类型,value为对象
];
让地图=新地图(数组);// 将数组传递给 Map 构造函数
地图上可用的方法
set(key, value): 添加一个键值对给它
get(key):如果key不存在则返回
has(key):返回一个布尔值
(key): 如果删除成功则为true,如果key不存在或删除失败则为false
clear():清除所有元素
size属性,属性值为map中键值对的个数
遍历方法()
与数组方法类似,回调函数包含3个参数值,key,调用该方法的Map集合本身
映射。((值,键,){
.log(键,值);// 每对键和值
.log( === 地图); // 真的
});
Set和Map最大的区别就是只有key没有value,所以一般用来判断其中是否存在某个元素(key)。
创建和初始化方法,类似于Map
您可以创建一个空集或使用数组来初始化一个非空集。与Map不同,数组是一维数组,每一个元素都会成为集合的key。例如:
// 创建一个数组
让数组 = [1, 'str']; // 一维数组
// 用数组初始化集合
让 set = new Set(array);
设置方法
add(key):向集合中添加一个元素,如果传入多个参数,则只添加第一个
让 set = new Set();
set.add(1, 2, 3);
.log(set.has(1), set.has(2), set.has(3));
// true false false 可以看到只有第一个参数被添加到集合中
有(钥匙)
(钥匙)
清除()
遍历法
和Map的方法类似,回调函数的参数也是3个(value, key, )。按理来说,既然set中只有key,没有value,那么回调函数中应该不存在value参数,那么为什么value参数还存在呢?羊毛布?可能是因为数组和Map的方法的回调函数的参数是这三个,如果把参数改成Set的话,就会失去一致性。这个原因......
那么既然没有值,那么这个值有什么价值呢?答案与钥匙相同。我们可以将值等同于键。下面的代码可以验证这个说法。
设置。((值,键,){
.log(value === key, set === ); // 真真
});
与前两个合集相比,这两个合集在名字前加了Weak。这个Weak可以直译为weak,这个weak指的是弱引用。那么前面没有Weak的Set和Map就不是弱了,而是强了。,这个强指的是强引用。
与 Set 和 Map 的区别
让我们从表面差异开始:
弱版本集合的key只能是对象,对value的类型没有限制。
弱版本的集合没有方法,没有for in方法,不能用数组初始化(会报错)。
弱版本可用的方法较少。只有add、has、方法可用;只有 set、has、get、方法可用。
弱版本集合与其对应的强版本的根本区别在于对对象的引用强度,对象指的是关键位置的对象,即对象为关键的情况。
key为对象时强弱版本的引用机制如下:
当对象被设置为键时,对象的引用被保存在集合中。当对象没有其他引用,即只有集合还引用该对象时,弱类型集合会放弃对该对象的引用,将这个对象从集合中移除,使其不再继续存在于集合,意思是“杀死一切”;但是强类型集合会一直保留这个对象的引用,所以它会一直放在集合的Here中。这是[and]和[Set and Map]的根本区别。
需要注意的是,这个机制只对key起作用,value位置绑定的对象无论是否有其他引用都不会放弃这个对象。只有当该位置的key绑定的对象没有其他引用时,才会将key和value都丢弃。决定就在关键位置。
如果版本收集可以用在需要生命周期管理的地方,比如保存一个DOM对象的引用,如果一个DOM对象用完了,没有其他引用了,那么就应该进行垃圾收集,避免内存泄漏,那么弱版本的集合最适合保存此类对象。
注意:四个集合都是有序的,即元素添加的顺序就是其内部存储的顺序。用数组初始化的集合也是如此,按照在数组中的位置顺序添加到集合中。