コンテンツにスキップ

JavaScript/WeakSet

出典: フリー教科書『ウィキブックス(Wikibooks)』
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日閲覧。

外部リンク[編集]