浅析Set,WeakSet,Map和WeakMap
Object(对象):键无序,键只能是String&Symbol
Map(字典):键有序,键可以是对象
Array(数组):下标和值一一对应
Set(集合):不含有重复值
1. 公共方法:
szie
:键值对个数delete(key)
get(key)
set(key,value)
has(key)
clear()
keys()
values()
entries
:默认遍历,包含 [key, value] 对的 Iterator 对象forEach()
2. Map与WeakMap(弱映射)
垃圾回收
JavaScript是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存。
// 大家好,我是...
let me = null;
// 然后,我有一个朋友他...
let myFriend = {
info: "I have a friend",
attr: "Lsp"
}
// me,myFriend指向同一个引用
me = myFriend;
// 后来···
me = null;
// 我?实际上依然指向···
myFriend;
依然存在引用(强引用),所以垃圾回收机制不会回收。
回收策略
JavaScript最常用垃圾回收策略是"标记清理(mark-and-sweep)"
策略的大意:
- 遍历空间下所有的对象,并标记活着的,有被引用的并且最终可以到达根(window/global)的对象。
- 在垃圾回收阶段的时候,将没有标记进行清除。
JavaScript中Map与WeakMap
WeakMap中的”weak“(弱),描述的是JavaScript垃圾回收程序对待的”弱映射“中键的方式. --《JavaScript高级程序设计(第四版)》
- 弱引用
// 大家好,我又来了
let me = new WeakMap();
// 然后,我有一个朋友,他...
let myArray = new Array(114514 * 19)
// me,myFriend
me.set(myArray,'info');
// 后来···
myArray = null;
// 下次垃圾回收机制执行,me所引用的对象就会被回收。
3. weakmap的使用
- DOM 节点元数据
- 部署私有属性
- 数据缓存
4. 引用
https://cloud.tencent.com/developer/article/1862103
https://zhuanlan.zhihu.com/p/266054976
https://juejin.cn/post/6844904191610060814
https://juejin.cn/post/7073739438710325284