国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

詳解ES6通過WeakMap解決內存泄漏問題

2024-05-06 16:42:57
字體:
來源:轉載
供稿:網友

一、Map

1.定義

Map對象保存鍵值對,類似于數據結構字典;與傳統上的對象只能用字符串當鍵不同,Map對象可以使用任意值當鍵。

2.語法

new Map([iterable])

屬性

size:返回鍵值對的數量。

操作方法

  1. set(key, value):設置(新增/更新)鍵key的值為value,返回Map對象。
  2. get(key):讀取鍵key的值,沒有則返回undefined。
  3. has(key):判斷一個Map對象中是否存在某個鍵值對,返回true/false。
  4. delete(key):刪除某個鍵值對,返回true/false。
  5. clear():清除Map對象中所有鍵值對。

遍歷方法

  1. keys():返回鍵名的Iterator對象。
  2. values():返回鍵值的Iterator對象。
  3. entries():返回鍵值對的Iterator對象。
  4. forEach((value, key, map) => {}):遍歷Map對象所有鍵值對。

3.示例

操作方法

let m = new Map([  ['foo', 11],  ['bar', 22]]);m.set('mazey', 322)  .set('mazey', 413);console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}console.log(m.has('mazey')); // truem.delete('mazey');console.log(m.has('mazey')); // falsem.clear();console.log(m); // {}

遍歷方法

let m = new Map([  ['foo', 11],  ['bar', 22],  ['mazey', 413]]);console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}console.log(m.keys()); // MapIterator {"foo", "bar", "mazey"}console.log(m.values()); // MapIterator {11, 22, 413}console.log(m.entries()); // MapIterator {"foo" => 11, "bar" => 22, "mazey" => 413}m.forEach((value, key, map) => {  console.log("鍵:%s,值:%s", key, value);});// 鍵:foo,值:11// 鍵:bar,值:22// 鍵:mazey,值:413

二、WeakMap

1.定義

WeakMap對象保存鍵值對,與Map不同的是其鍵必須是對象,因為鍵是弱引用,在鍵對象消失后自動釋放內存。

2.語法

new WeakMap([iterable])

方法

  1. set(key, value):設置(新增/更新)鍵key的值為value,返回WeakMap對象。
  2. get(key):讀取鍵key的值,沒有則返回undefined。
  3. has(key):判斷一個WeakMap對象中是否存在某個鍵值對,返回true/false。
  4. delete(key):刪除某個鍵值對,返回true/false。

注意

因為WeakMap的特殊的垃圾回收機制,所以沒有clear()方法。

3.示例

let obj = {  foo: 11};let wm = new WeakMap();wm.set(obj, 413322);console.log(wm); // {{…} => 413322}console.log(wm.has(obj)); // true

三、通過WeakMap解決內存泄漏問題

當使用Dom對象綁定事件時,Dom對象消失后若沒有及時釋放內存(置null),便會一直存在內存中。

使用WeakMap保存Dom對象不會出現這樣的問題,因為Dom對象消失后,JS的垃圾回收機制便會自動釋放其所占用的內存。

<button type="button" id="btn">按鈕</button><script>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);});// 1 2 3 4 5...</script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海盐县| 酉阳| 阿瓦提县| 九江市| 黄冈市| 白银市| 山丹县| 徐闻县| 抚松县| 瑞昌市| 宜春市| 中牟县| 江陵县| 长丰县| 托里县| 临武县| 密山市| 达州市| 扎兰屯市| 鹿泉市| 旅游| 会理县| 浮山县| 德清县| 嘉兴市| 兴化市| 澳门| 仲巴县| 阜宁县| 黑龙江省| 阜宁县| 皋兰县| 定结县| 阜城县| 涿州市| 黔江区| 祁门县| 平阴县| 郁南县| 仲巴县| 同仁县|