Set、Map、WeakSet 和 WeakMap 的区别
程序员文章站
2022-06-12 21:43:18
...
Set
MDN:Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
let a = new Set();
undefined
a.add(1);
// 输出 Set(1) {1}
a.add(2);
// 输出 Set(2) {1, 2}
a.add(2);
// 输出 Set(2) {1, 2}
从代码上可以看出去重
但是
let b = new Set();
b.add({val:1})
b.add({val:1})
// 输出 Set(2) {{val:1}, {val:1}}
也就是说明并不能判断对象是否重复
let a = {val:1};
let b = new Set();
b.add({a)
b.add(a)
// 输出 Set(1) {{val:1}}
object 类型只能判断对象是否是同一个引用而去重的,也就是可能在Set内部中用的是===来判断的
set总结
-
成员唯一、无序且不重复;
-
[value, value],键值与键名是一致的(或者说只有键值,没有键名);
-
可以遍历,方法有:add、delete、has、clear、entries、forEach、keys、values
-
Set也能用来保存NaN和undefined, 如果有重复的NaN, Set会认为就一个NaN(实际上NaN!=NaN);
WeakSet
成员都是对象;
成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏;
不能遍历,方法有 add、delete、has。
Map
本质上是键值对的集合,类似集合;
可以遍历,方法很多,可以跟各种数据格式转换。
WeakMap
只接受对象最为键名(null 除外),不接受其他类型的值作为键名;
键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的;
不能遍历,方法有 get、set、has、delete。
上一篇: 一则python3的简单爬虫代码
下一篇: 原型模式(Prototype)
推荐阅读
-
set_include_path在win和linux下的区别
-
对python内置map和six.moves.map的区别详解
-
Python中内置数据类型list,tuple,dict,set的区别和用法
-
彻底弄懂ES6中的Map和Set
-
引用、浅拷贝及深拷贝 到 Map、Set(含对象assign、freeze方法、WeakMap、WeakSet及数组map、reduce等等方法)
-
JS forEach和map方法的用法与区别分析
-
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
-
一文搞懂ES6中的Map和Set
-
Go语言中的Array、Slice、Map和Set使用详解
-
JS中Map和ForEach的区别