WeakSetの要素確認には`has()`メソッドを使用できます。`has()`メソッドは、指定したオブジェクトがWeakSetに含まれているかどうかを確認し、true/falseを返します。

WeakSet.has()メソッドの基本的な使い方

const weakSet = new WeakSet();
const obj = {};

weakSet.add(obj);
console.log(weakSet.has(obj)); // true
console.log(weakSet.has({}));  // false

`has()`メソッドは引数にオブジェクトを受け取り、そのオブジェクトがWeakSetに存在する場合は`true`を、存在しない場合は`false`を返します。

注意点と制限事項

1. WeakSetにはオブジェクトのみを格納できます。プリミティブ値(数値、文字列など)は格納できません。

const weakSet = new WeakSet();
weakSet.add("文字列"); // TypeError: Invalid value used in weak set

2. WeakSetは弱い参照を持つため、格納したオブジェクトへの参照がなくなると自動的にガベージコレクションの対象となります。

let obj = { id: 1 };
const weakSet = new WeakSet([obj]);
console.log(weakSet.has(obj)); // true

obj = null; // objへの参照を削除
// この時点でWeakSetからobjが削除される可能性がある

実践的な使用例

WeakSetは、オブジェクトの一意性を管理する場合に便利です。

const visited = new WeakSet();

function processUser(user) {
    if (visited.has(user)) {
        console.log('このユーザーは既に処理済みです');
        return;
    }
    
    visited.add(user);
    console.log('ユーザーを処理しました');
}

const user = { name: 'John' };
processUser(user); // ユーザーを処理しました
processUser(user); // このユーザーは既に処理済みです

まとめ

  • `has()`メソッドはWeakSetに特定のオブジェクトが存在するかを確認できます
  • WeakSetにはオブジェクトのみを格納可能です
  • メモリリークを防ぐために、オブジェクトへの参照が削除されると自動的にWeakSetからも削除されます
  • オブジェクトの重複処理防止などに活用できます

WeakSetの`has()`メソッドを使用することで、効率的にオブジェクトの存在確認が可能になり、メモリ管理も最適化されます。