JavaScript > 標準ライブラリ WeakMap

WeakMapオブジェクト 編集

WeakMapオブジェクトは弱保持オブジェクト(weakly held objects)をキーとするの連想配列を扱うための機能を組み込んだコレクションオブジェクトです。 WeakMapオブジェクトの生成には、WeakMapコンストラクターを使います。

const wm = new WeakMap()

WeakMapオブジェクトにリテラルはありません。

注意
WeakMapオブジェクトもオブジェクトなので、ドット記法(wm.prop)やブラケット記法(wm.["prop"])でプロパティにアクセスできますが、それはWeakMapオブジェクトの提供する連想配列ではなく、ただのオブジェクトです。WeakMapオブジェクトの要素へのアクセスにはset(),get()メソッドを使います。

Mapオブジェクトとの違い 編集

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) 編集

脚註 編集

  1. ^ WeakMap - JavaScript // MDN” (2021年12月8日). 2021年12月28日閲覧。

外部リンク 編集