この記事では主に、ES6 が WeakMap を使用してメモリ リーク問題を解決する方法について詳しく説明します。編集者はそれが非常に優れていると考えたので、皆さんのお役に立てればと思い、ここで共有します。
1. Map
1. 定義
Map オブジェクトは、データ構造辞書と同様に、キーとして文字列のみを使用できる従来のオブジェクトとは異なり、任意の値をキーとして使用できます。
2. 構文
new Map([iterable])
属性
size: キーと値のペアの数を返します。
操作メソッド
set(key, value): key keyの値をvalueに設定(追加・更新)し、Mapオブジェクトを返します。
get(key): キー key の値を読み取り、そうでない場合は、unknown を返します。
has(key): Map オブジェクトにキーと値のペアが存在するかどうかを判断し、true/false を返します。
delete(key): キーと値のペアを削除し、true/false を返します。
clear(): Map オブジェクト内のすべてのキーと値のペアをクリアします。
Traversal メソッド
keys(): キー名の Iterator オブジェクトを返します。
values(): キー値の Iterator オブジェクトを返します。
entries(): キーと値のペアの Iterator オブジェクトを返します。
forEach((value, key, map) => {}): Map オブジェクトのすべてのキーと値のペアを走査します。
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')); // true m.delete('mazey'); console.log(m.has('mazey')); // false m.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
new WeakMap([iterable])
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 オブジェクトが消滅すると、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>
JavaScriptのメモリリークに対処する方法の例の共有
JavaScriptプログラムにおけるメモリリークのグラフィックコードの詳細な紹介
以上がES6 WeakMap でメモリ リークを解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。