JavaScript/WeakMap
表示
- JavaScript > 標準ライブラリ WeakMap
WeakMapオブジェクト
[編集]WeakMapオブジェクトは弱保持オブジェクト(weakly held objects)をキーとするの連想配列を扱うための機能を組み込んだコレクションオブジェクトです。 WeakMapオブジェクトの生成には、WeakMapコンストラクターを使います。
const wm = new WeakMap()
WeakMapオブジェクトにリテラルはありません。
- 注意
- WeakMapオブジェクトもオブジェクトなので、ドット記法(wm.prop)やブラケット記法(wm.["prop"])でプロパティにアクセスできますが、それはWeakMapオブジェクトの提供する連想配列ではなく、ただのオブジェクトです。WeakMapオブジェクトの要素へのアクセスにはset(),get()メソッドを使います。
JavaScriptには、他にも連想配列をサポートするオブジェクト「Mapオブジェクト」がありますが、WeakMapはWeak held objects(弱保持オブジェクト)をキーとするところが違います。 具体的には、
- WeakMap のキーは、オブジェクトだけでプリミティブは格納できない
- WeakMap のキーとしたオブジェクトへの参照が他に存在しない場合、それらのオブジェクトはガベージコレクションされる可能性がある
- WeakMap は、反復プロトコルはサポートしない
コード例
[編集]- コード例
const wm1 = new WeakMap() ; console.log(wm1) let obj = {}, lmd = x => x * x, ary = [1,2,3] wm1.set(obj, "abc") ; console.log('wm1.set(obj, "abc") ; wm1 =', wm1) wm1.set(lmd, []) ; console.log('wm1.set(lmd, []) ; wm1 =', wm1) wm1.set(ary, 123) ; console.log('wm1.set(ary, 123) ; wm1 =', wm1) wm1.set([1,2,3], "1") ; console.log('wm1.set([1,2,3], "1"); wm1 =', wm1) wm1.delete(obj) ; console.log('wm1.delete(obj) ; wm1 =', wm1) wm1.delete(obj) ; console.log('wm1.delete(obj) ; wm1 =', wm1) wm1.set(obj, 0) ; console.log('wm1.set(obj, 0) ; wm1 =', wm1) console.log(`wm1.get(obj) = ${wm1.get(obj)}, wm1.get([]) = ${wm1.get([])}`) console.log(`wm1.has(obj) = ${wm1.has(obj)}, wm1.has([]) = ${wm1.has([])}`) const a = new WeakMap() const b = new WeakMap() a.set([], 1) b.set([], 1) console.log(a == b)
- 実行結果
WWeakMap { <items unknown> } wm1.set(obj, "abc") ; wm1 = WeakMap { <items unknown> } wm1.set(lmd, []) ; wm1 = WeakMap { <items unknown> } wm1.set(ary, 123) ; wm1 = WeakMap { <items unknown> } wm1.set([1,2,3], "1"); wm1 = WeakMap { <items unknown> } wm1.delete(obj) ; wm1 = WeakMap { <items unknown> } wm1.delete(obj) ; wm1 = WeakMap { <items unknown> } wm1.set(obj, 0) ; wm1 = WeakMap { <items unknown> } wm1.get(obj) = 0, wm1.get([]) = undefined wm1.has(obj) = true, wm1.has([]) = false false
- WeakMapの文字列化すると "WeakMap { <items unknown> }" になります(内容不明)。
- hasメソッドは、厳密に同一のオブジェクトのみ true を返します[1]。
プロパティ
[編集]静的プロパティ
[編集]- WeakMap.length
- 1
- コンストラクタの引数の数
- WeakMap.name
- "WeakMap"
- WeakMap.prototype
- [object]
静的メソッド
[編集]インスタンスプロパティ
[編集]WeakMap.prototype.size
[編集]WeakMapオブジェクトの要素数。
インスタンスメソッド
[編集]この節は書きかけです。この節を編集してくれる方を心からお待ちしています。
WeakMap.prototype.constructor()
[編集]WeakMap.prototype.delete(0)
[編集]WeakMap.prototype.get(0)
[編集]WeakMap.prototype.has(0)
[編集]= WeakMap.prototype.set(0,0)
[編集]脚註
[編集]- ^ “WeakMap - JavaScript // MDN” (2021年12月8日). 2021年12月28日閲覧。
外部リンク
[編集]- “ECMA-262::24.3 WeakMap Objects” (2021年12月17日). 2021年12月28日閲覧。