JavaScript > 標準ライブラリ WeakSet

WeakSetオブジェクト編集

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

const WeakSet = new WeakSet()

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

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

JavaScriptには、他にも集合をサポートするオブジェクト「Setオブジェクト」がありますが、WeakSetはWeak held objects(弱保持オブジェクト)を格納するところが違います。 具体的には、

  • WeakSet に格納できるオブジェクトは、オブジェクトだけでプリミティブは格納できない
  • WeakSet に格納されたオブジェクトへの参照が他に存在しない場合、それらのオブジェクトはガベージコレクションされる可能性がある
  • WeakSet は、反復プロトコルはサポートしない

コード例編集

コード例
const ws1 = new WeakSet() ; console.log('ws1 = new WeakSet(); ws1=', ws1)

let obj = {}, lmd = x => x * x, ary = [1,2,3]
ws1.add(obj)              ; console.log('ws1.add(obj);        ws1=', ws1)
ws1.add(lmd)              ; console.log('ws1.add(lmd);        ws1=', ws1)
ws1.add(ary)              ; console.log('ws1.add(ary);        ws1=', ws1)
console.log(`ws1.has(obj) = ${ws1.has(obj)}, ws1.has({}) = ${ws1.has({})}`)
console.log(`ws1.has(lmd) = ${ws1.has(lmd)}, ws1.has(x=>x*x) = ${ws1.has(x=>x*x)}`)
console.log(`ws1.has(ary) = ${ws1.has(ary)}, ws1.has([1,2,3]) = ${ws1.has([1,2,3])}`)
実行結果
ws1 = new WeakSet(); ws1= WeakSet { <items unknown> }
ws1.add(obj);        ws1= WeakSet { <items unknown> }
ws1.add(lmd);        ws1= WeakSet { <items unknown> }
ws1.add(ary);        ws1= WeakSet { <items unknown> }
ws1.has(obj) = true, ws1.has({}) = false
ws1.has(lmd) = true, ws1.has(x=>x*x) = false
ws1.has(ary) = true, ws1.has([1,2,3]) = false
WeakSetの文字列化すると "WeakSet { <items unknown> }" になります(内容不明)。
hasメソッドは、厳密に同一のオブジェクトのみ true を返します[1]

プロパティ編集

静的プロパティ編集

WeakSet.length
1
コンストラクタの引数の数
WeakSet.name
"WeakSet"
WeakSet.prototype
[object]

静的メソッド編集

インスタンスプロパティ編集

WeakSet.prototype.size編集

WeakSetオブジェクトの要素数。

インスタンスメソッド編集

この節は書きかけです。この節を編集してくれる方を心からお待ちしています。

WeakSet.prototype.add(item)編集

WeakSet.prototype.constructor()編集

WeakSet.prototype.delete(item)編集

WeakSet.prototype.has(item)編集

脚註編集

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

外部リンク編集