JavaScript/WeakSet
- JavaScript > 標準ライブラリ WeakSet
WeakSetオブジェクト
編集WeakSetオブジェクトは弱保持オブジェクト(weakly held objects)の集合を扱うための機能を組み込んだコレクションオブジェクトです。 WeakSetオブジェクトの生成には、WeakSetコンストラクターを使います。
const WeakSet = new WeakSet()
WeakSetオブジェクトにリテラルはありません。
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)
編集脚註
編集- ^ “WeakSet - JavaScript // MDN” (2021年12月8日). 2021年12月26日閲覧。
外部リンク
編集- “ECMA-262::24.2 WeakSet Objects” (2021年12月17日). 2021年12月26日閲覧。[ ]