Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【JavaScript ECMAScript】TypeError: WeakSet key/WeakMap value 'x' must be an object or an unregistered symbolエラーの使い方

TypeError: WeakSet key/WeakMap value 'x' must be an object or an unregistered symbolエラーの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

TypeError: WeakSet key/WeakMap value 'x' must be an object or an unregistered symbolオブジェクトは、JavaScriptのWeakSetWeakMapデータ構造を使用する際に、不正なデータ型を格納しようとした場合に発生するエラーを表すオブジェクトです。

このエラーは、具体的に以下の二つの状況で発生します。一つは、WeakSetに新しい要素(キー)を追加しようとしたとき、もう一つは、WeakMapに新しいキーと値のペアを設定しようとしたときに、値としてオブジェクトまたは登録されていないシンボル以外のものが渡された場合です。WeakSetのキーとWeakMapの値として許可されるのは、オブジェクト型(例:通常のオブジェクト、配列、関数、クラスのインスタンスなど)またはSymbol()関数で作成された登録されていないシンボルのみです。文字列、数値、真偽値、nullundefinedなどのプリミティブ値は使用できません。

この制約は、WeakSetWeakMapがその名のとおり「弱い参照」を持つことと密接に関連しています。弱い参照とは、キーまたは値として格納されたオブジェクトが他のどこからも参照されなくなった場合に、JavaScriptのガベージコレクターによって自動的にメモリから解放されることを妨げない参照方式を指します。プリミティブ値はガベージコレクションの対象とならないため、弱い参照の概念が適用できません。そのため、誤用や意図しないメモリ管理上の問題を防ぐために、この厳格な型チェックが設けられています。

このエラーに遭遇した場合は、WeakSetWeakMapに格納しようとしている要素や値が、有効なオブジェクトまたは登録されていないシンボルであることを確認してください。プリミティブ値を格納したい場合は、SetMapなどの標準的なコレクションを使用することが適切です。これにより、プログラムの意図を正しく反映し、安定した動作を確保することができます。

構文(syntax)

1const myWeakSet = new WeakSet();
2const nonObjectKey = 123; // または "string", true, null, undefined, Symbol.for('registered_symbol') など
3
4myWeakSet.add(nonObjectKey);

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

関連コンテンツ

関連プログラミング言語