set和map主要应用场景:Set--->数据重组Set是一种称为集合的数据结构;Map--->数据存储Map是一种叫做字典的数据结构。集合和字典的区别:共同点:集合和字典可以存储不重复的值区别:集合以[value,value]的形式存储元素,而字典以[key,value]的形式存储集合(Set)]:ES6新增的一种数据结构,类似于数组,成员唯一(内部元素无重复值)。并使用key对数据进行排序,即顺序存储(评论区老大提醒)。Set本身是一个构造函数,用于生成一个Set数据结构。集合对象允许您存储任何类型的唯一值,无论是原始值还是对象引用。:consts=newSet()[1,2,3,4,3,2,1].forEach(x=>s.add(x))for(letiofs){console.log(i)//1234}//去重数组letarr=[1,2,3,2,1,1][...newSet(arr)]//[1,2,3]注意:向Set中添加值时,不会发生类型转换,所以5和“5”是两个不同的值。Set内部判断两个值是否不同。使用的算法称为“同值零相等”,类似于精确相等运算符(===)。主要区别在于NaN等于自身,而精确相等运算符认为NaN不等于自身。:letset=newSet();leta=NaN;letb=NaN;set.add(a);set.add(b);set//设置{NaN}letset1=newSet()set1.add(5)set1.add('5')console.log([...set1])//[5,"5"]操作方法:add(value):add,相当于压入数组。delete(value):如果存在,删除集合中的值。has(value):判断集合中是否存在value。clear():清除集合。便捷方法:遍历法(遍历顺序为插入顺序)keys():返回包含集合中所有键的迭代器。values():返回包含集合中所有值的迭代器。entries():返回包含Set对象中所有元素的键值对迭代器。forEach(callbackFn,thisArg):用于对集合成员进行callbackFn操作。如果提供了thisArg参数,回调中的this就是this参数,没有返回值。WeakSet:WeakSet对象允许您在集合中存储弱引用对象。WeakSet和Set的区别:WeakSet只能存储对象引用,不能存储值,而Set对象可以。WeakSet对象中存储的对象值都是弱引用的,即垃圾回收机制不考虑WeakSet对对象的应用。如果没有其他变量或属性引用该对象的值,该对象将被垃圾回收(不考虑该对象仍然存在于WeakSet中),WeakSet对象中成员元素的数量取决于垃圾回收机制是否运行。运行前后成员数量可能不一致,遍历垃圾回收后部分成员可能不可用),无法遍历WeakSet对象(ES6规定无法遍历WeakSet),无法获取它包含的所有元素。方法:add(value):在WeakSet对象中添加一个元素值。has(value):判断WeakSet对象是否包含value。delete(value):删除元素值。字典(Map):是一组键值对的结构,查找速度极快。:constm=newMap()consto={p:'haha'}m.set(o,'content')m.get(o)//contentm.has(o)//truem.delete(o)//truem.has(o)//false操作方法:set(key,value):添加新元素到字典中。get(key):通过key找到一个特定的值并返回。has(key):判断字典中是否存在键key。delete(key):通过key键从字典中删除对应的数据。clear():删除本字典中的所有元素。遍历方法:Keys():以迭代器的形式返回字典中包含的所有键名。values():以迭代器的形式返回字典中包含的所有值。entries():返回所有成员的迭代器。forEach():遍历字典的所有成员。WeakMap:WeakMap对象是键值对的集合,其中键是一个弱引用对象,值可以是任意的。请注意,WeakMap仅弱引用键名,而不是键值。键值还是正常引用。在WeakMap中,每个键对它所引用的对象的引用都是弱引用。如果没有其他引用引用与该键相同的对象,则该对象将被垃圾回收(相应的键将变为无效)。因此,WeakMap的键是不可枚举的。方法:has(key):判断是否有key关联对象。get(key):返回键关联对象(如果没有键则返回未定义)。set(key):设置一组key关联对象。delete(key):移除key的关联对象。总结:集合:成员是唯一的、无序的、不重复的。[value,value],键值与键名一致(或者只有键值,没有键名)。可以遍历,方法有:add、delete、has。WeakSet:成员都是对象。成员都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不易造成内存泄漏。不可遍历,方法有add、delete、has。Map:本质上是键值对的集合,类似于集合。可以遍历,有很多种方式可以与各种数据格式进行转换。WeakMap:只接受对象作为键(null除外),不接受其他类型的值作为键。键名是弱引用,键值可以是任意的,键名指向的对象可以被垃圾回收,此时键名无效。不可遍历,方法有get、set、has、delete。
