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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 14:12:06
字體:
來源:轉載
供稿:網友

一、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>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃源县| 泰顺县| 冷水江市| 姜堰市| 昭通市| 墨玉县| 抚州市| 正镶白旗| 吐鲁番市| 东海县| 连江县| 芒康县| 秦皇岛市| 上饶县| 海盐县| 天水市| 通渭县| 越西县| 三穗县| 隆德县| 曲松县| 古交市| 广饶县| 新泰市| 通道| 伊通| 江城| 永昌县| 静海县| 古丈县| 墨玉县| 思南县| 大兴区| 苗栗市| 京山县| 临江市| 怀集县| 和静县| 马公市| 开封县| 宁明县|