new Map([
[true, 7],
[{foo: 3}, [‘abc’]]
])
- Map 转为对象
function strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k,v] of strMap) {
obj[k] = v;
}
return obj;
}
const myMap = new Map()
.set(‘yes’, true)
.set(‘no’, false);
console.log(strMapToObj(myMap));
//{ yes: true, no: false }
- 对象转为 Map
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
console.log(objToStrMap({yes: true, no: false}));
// Map {“yes” => true, “no” => false}
- Map 转为 JSON
function strMapToJson(strMap) {
return JSON.stringify(strMapToObj(strMap));
}
let myMap = new Map().set(‘yes’, true).set(‘no’, false);
console.log(strMapToJson(myMap));
// ‘{“yes”:true,“no”:false}’
另一种情况,将Map转为数组JSON
function mapToArrayJson(map) {
return JSON.stringify([…map]);
}
let myMap = new Map().set(true, 7).set({foo: 3}, [‘abc’]);
mapToArrayJson(myMap)
// ‘[[true,7],[{“foo”:3},[“abc”]]]’
- JSON 转为 Map
function jsonToStrMap(jsonStr) {
return objToStrMap(JSON.parse(jsonStr));
}
console.log(jsonToStrMap(‘{“yes”: true, “no”: false}’));
// Map {‘yes’ => true, ‘no’ => false}
另一种情况
function jsonToMap(jsonStr) {
return new Map(JSON.parse(jsonStr));
}
jsonToMap(‘[[true,7],[{“foo”:3},[“abc”]]]’)
// Map {true => 7, Object {foo: 3} => [‘abc’]}
3. 原生实现一个map
4. map和WeakMap的区别,为什么会出现WeakMap这种结构呢?
-
WeakMap只接受一个对象作为键(null除外)
-
WeakMap的键名所指向的对象,不计入垃圾回收机制。
-
只有四个方法,get()、set()、has()、delete()
主要是因为:比如使用map结构,对对象obj进行了引用,则除非手动清除map结构或手动删除引用,obj的内存才会被释放,反之则一直被map引用,不会被垃圾回收机制回收。一旦忘了写,就会造成内存泄露。
WeakMap 就是为了解决这个问题而诞生的,它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。以下代码就可以反映:
let a = new WeakMap();
let obj = {a:“12”};
a.set(obj, “12”);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
性能优化
1.webpack打包文件体积过大?(最终打包为一个js文件)
2.如何优化webpack构建的性能
3.移动端的性能优化
4.Vue的SPA 如何优化加载速度
5.移动端300ms延迟
6.页面的重构
所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
bG9nLmNzZG4ubmV0L2h1Z28yMzM=,size_16,color_FFFFFF,t_70)