A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/WeakSet below:

WeakSet - JavaScript | MDN

WeakSet

Baseline Widely available *

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

解説

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

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

使用例: 循環参照の検出

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

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

// Execute a callback on everything stored inside an object
function 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)

value を WeakSet オブジェクトに追加します。

WeakSet.prototype.delete(value)

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

WeakSet.prototype.has(value)

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

例 WeakSet オブジェクトの使用
const ws = new WeakSet();
const foo = {};
const bar = {};

ws.add(foo);
ws.add(bar);

ws.has(foo); // true
ws.has(bar); // true

ws.delete(foo); // foo を set から削除
ws.has(foo); // false, foo は削除済み
ws.has(bar); // true, bar は残っている

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

仕様書 ブラウザーの互換性 関連情報

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4