一、Map 1.定义 Map对象保存键值对,类似于数据结构字典;与传统上的对象只能用字符串当键不同,Map对象可以使用任意值当键。 2.语法 new Map([iterable]) 属性 size:返回键值对的数量。 操作方法 set(key, value):设置(新增/更新)键key的值为value,返回Map对象。 get(key):读取键key的值,没有则返回undefined。 has(key):判断一个Map对象中是否存在某个键值对,返回true/false。 delete(key):删除某个键值对,返回true/false。 clear():清除Map对象中 在JavaScript的世界里,内存管理是开发者需要注意的重要环节。内存泄漏会导致程序运行效率降低,甚至可能导致应用崩溃。ES6引入了新的数据结构`Map`和`WeakMap`,它们在处理键值对时提供了更强大的功能,并能有效地帮助解决内存泄漏问题。 我们来看`Map`。`Map`是一种用于存储键值对的数据结构,它允许使用任何可哈希的值作为键,不仅仅是字符串。这使得`Map`在处理复杂数据结构时非常有用。`Map`的构造函数`new Map()`可以接受一个可迭代对象作为参数,用于初始化键值对。它的主要方法包括: 1. `set(key, value)`:设置或更新键`key`对应的值为`value`,并返回`Map`对象本身。 2. `get(key)`:返回键`key`对应的值,如果不存在,则返回`undefined`。 3. `has(key)`:检查`Map`对象中是否存在键`key`,返回`true`或`false`。 4. `delete(key)`:删除键`key`及其对应的值,返回`true`表示成功,`false`表示键不存在。 5. `clear()`:清空`Map`对象中的所有键值对。 遍历`Map`的方法有: 1. `keys()`:返回一个迭代器,用于遍历所有的键。 2. `values()`:返回一个迭代器,用于遍历所有的值。 3. `entries()`:返回一个迭代器,用于遍历所有的键值对。 4. `forEach(callbackFn)`:遍历`Map`对象的所有键值对,执行提供的回调函数。 例如: ```javascript let m = new Map([['foo', 11], ['bar', 22]]); m.set('mazey', 413); console.log(m); m.has('mazey'); // true m.delete('mazey'); console.log(m); ``` 接下来是`WeakMap`,它与`Map`类似,但有关键的区别:`WeakMap`的键必须是对象,而且是弱引用。这意味着,当键对象不再被其他任何引用时,垃圾回收机制会自动清理这个键及其对应的值,防止内存泄漏。由于键是弱引用,`WeakMap`不支持`size`属性和`clear()`方法。 `WeakMap`的主要方法与`Map`基本相同: 1. `set(key, value)`:设置键`key`的值为`value`,返回`WeakMap`对象本身。 2. `get(key)`:返回键`key`的值,如果不存在,则返回`undefined`。 3. `has(key)`:检查`WeakMap`中是否存在键`key`,返回`true`或`false`。 4. `delete(key)`:删除键`key`及其对应的值,返回`true`表示成功,`false`表示键不存在。 下面是一个`WeakMap`的例子: ```javascript let obj = {foo: 11}; let wm = new WeakMap(); wm.set(obj, 413322); console.log(wm.has(obj)); // true ``` 特别地,`WeakMap`在处理与DOM元素相关的内存泄漏问题时非常有效。例如,当我们在DOM元素上绑定事件监听器时,如果不正确地解除引用,DOM元素即使被移除,监听器仍然会占用内存。使用`WeakMap`来保存DOM元素,当元素被垃圾回收时,对应的键值对也会自动消失: ```javascript let wm = new WeakMap(); let btn = document.querySelector('#btn'); wm.set(btn, {count: 0}); btn.addEventListener('click', () => { let v = wm.get(btn); v.count++; console.log(wm.get(btn).count); }); ``` 在这个例子中,即使按钮被删除,`WeakMap`中的键值对也会随着按钮对象的销毁而被自动清理,避免了内存泄漏的问题。 `Map`和`WeakMap`是ES6引入的两个重要工具,它们为JavaScript提供了更灵活的数据存储方式,并有助于开发者更好地管理和控制内存,尤其是通过`WeakMap`,可以有效地防止因DOM对象引起的内存泄漏。了解并熟练运用这两个数据结构,将提升你的JavaScript编程技巧和应用性能。
- 粉丝: 0
- 资源: 883
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- CocosCreator源码资源jump(跳一跳)
- (源码)基于智能物联网的环境监控与预测系统 Safe Lab.zip
- (源码)基于Python和ROS的PX4无人机灯光与报警系统.zip
- CocosCreator源码资源Heroes(精品游戏)
- (源码)基于Python与Arduino的视频转换显示系统-PyToArduinoVideo.zip
- (源码)基于MQTT和InfluxDB的CO2监测系统.zip
- CocosCreator源码资源games(小游戏合集 内含11款)
- 毕业设计《安卓Android校园办公用品管理系统(可导入Studio)》+Java项目源码+文档说明
- 225307陈治宇.pptx
- (源码)基于Arduino的Hotoscope焊接系统.zip