WeakMap
keyは必ずobjectでなければならない
stringとかはkeyにできない
keyに指定したobjectの参照は弱参照となる
反復処理できない
そのkeyに相当するobjectの参照がなくなると、対応するvalueも消える
code:js
let key = {};
const wm = new WeakMap()
wm.set(key, "hoge")
console.log(wm.has(key)) // true
key = null
console.log(wm.has(key)) // false
Mapも同じ挙動やんけmrsekut.iconmrsekut.icon*2
WeakMapのコード例として成立していない
gpt-4.icon
JavaScriptのWeakMapは、Mapオブジェクトと非常に似た特性を持つコレクションです。しかし、いくつか重要な違いがあり、それが特定のユースケースを可能にしています。
**WeakMapとは**
WeakMapはキーとしてオブジェクトを持つことができるコレクションです。この点では、通常のMapと同様です。しかし、WeakMapのキーは"弱く"保持されています。これは、もしキーのオブジェクトへの参照が他のどこにも存在しなくなった場合、ガベージコレクション(GC)の対象となるという意味です。そのため、WeakMapはメモリリークを防ぐのに役立ちます。
**WeakMapとMapの違い**
以下はWeakMapとMapの主な違いです。
1. WeakMapではキーとしてオブジェクトのみを使用できます。Mapでは、どのような型のキーでも使用することが可能です。
2. WeakMapのキーは弱く保持されます。つまり、キーのオブジェクトへの参照が他になければ、そのキー/値のペアは自動的にガベージコレクションの対象となります。これに対し、Mapはそのキーと値を強く保持します。ガベージコレクションは起こらず、キーと値は明示的に削除されるまで存在し続けます。
3. WeakMapはイテラブルではありません。これは、WeakMapに.keys()や.values()、.entries()のようなメソッドがないことを意味します。これはガベージコレクションが任意のタイミングで発生するため、常に正確な内容を反映することができないからです。
4. WeakMapはキーの数を追跡しません。つまり、.sizeプロパティはありません。
**WeakMapのユースケース**
WeakMapの特性は、一部の特定のユースケースに非常に役立ちます。
1. **プライベートデータのストア**: JavaScriptのクラス内で、特定のインスタンスに関連付けられたプライベートデータを格納するために、WeakMapがしばしば使用されます。WeakMapを使用すると、該当インスタンスがどこからも参照されなくなったときに、それに関連付けられたデ
ータも自動的にクリーンアップされます。
2. **メモリリークの防止**: WeakMapのキーがガベージコレクションの対象となる性質は、メモリリークのリスクを大幅に減らします。Mapを使うと、キーとして使われるオブジェクトはMapが生存している限りメモリから解放されません。しかし、WeakMapを使えば、オブジェクトが必要なくなった時点でメモリから解放されます。
3. **DOMノードとの関連付け**: WeakMapはDOMノードとデータを関連付けるのに便利です。DOMノードが削除されたとき、それに関連するデータも自動的に削除されるため、メモリリークを防ぐことができます。
以上がWeakMapの基本的な解説、その通常のMapとの違い、および主なユースケースになります。