Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

WeakSet

BaselineWidely available *

WeakSet オブジェクトは、コレクションに弱く参照されたオブジェクトを格納することができます。

解説

WeakSet オブジェクトはコレクションオブジェクトです。Set と同様に、WeakSet 内の各オブジェクトは一度だけ存在します。すなわち、WeakSet コレクション内で固有になります。

Set オブジェクトとの主な違いは下記の通りです。

  • WeakSetオブジェクトのみのコレクションです。Set のように、任意の型の自由な値を入れることはできません。

  • WeakSet弱い参照です。コレクション内のオブジェクトへの弱い参照で保持されます。WeakSet 内に格納されているオブジェクトへの参照が他にない場合、ガベージコレクションにより削除されます。

    メモ:これは、このコレクションに格納されているオブジェクトの現在のリストが存在しないことを意味します。WeakSets は列挙可能ではありません。

使用例: 循環参照の検出

自分自身を再帰的に呼び出す関数は、どのオブジェクトが処理済みであるかを追跡することで、循環したデータ構造を防ぐ必要があります。

WeakSet はこの目的に理想的です。

js
// Execute a callback on everything stored inside an objectfunction execRecursively(fn, subject, _refs = null) {  if (!_refs) _refs = new WeakSet();  // Avoid infinite recursion  if (_refs.has(subject)) return;  fn(subject);  if ("object" === typeof subject) {    _refs.add(subject);    for (let key in subject) execRecursively(fn, subject[key], _refs);  }}const foo = {  foo: "Foo",  bar: {    bar: "Bar",  },};foo.bar.baz = foo; // Circular reference!execRecursively((obj) => console.log(obj), foo);

ここで、WeakSet は最初の実行時に作成され、その後の関数呼び出しのたびに (内部の_refs 引数を使用して) 渡されます。

オブジェクトの数や探索順序は重要ではないので、オブジェクトの参照を追跡するにはWeakSet のほうがSet よりも、特に巨大な数のオブジェクトを処理する場合にはよりふさわしい (そして性能もよい) ものです。

コンストラクター

WeakSet()

新しいWeakSetオブジェクトを生成します。

インスタンスメソッド

WeakSet.prototype.add(value)

valueWeakSet オブジェクトに追加します。

WeakSet.prototype.delete(value)

valueWeakSet オブジェクトから削除します。削除後、WeakSet.prototype.has(value)false を返します。

WeakSet.prototype.has(value)

valueWeakSet オブジェクト内の要素に含まれているかどうかを示す論理値を返します。

WeakSet オブジェクトの使用

js
const ws = new WeakSet();const foo = {};const bar = {};ws.add(foo);ws.add(bar);ws.has(foo); // truews.has(bar); // truews.delete(foo); // foo を set から削除ws.has(foo); // false, foo は削除済みws.has(bar); // true, bar は残っている

foo !== bar であることに注意してください。これらは似たオブジェクトですが、まったく同じオブジェクトではありません。したがって、両方のオブジェクトが set に追加されます。

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-weakset-objects

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp