WeakMap に関する MDN ドキュメントを読んでいます。そして、構文について言及しています:
new WeakMap([iterable])
しかし、これを試したところ、エラーが発生しました:
var arr = [{a:1}];
var wm1 = new WeakMap(arr);
キャッチされていない TypeError: 無効な値が弱いマップ キーとして使用されました
配列を介してそれを行う方法の例を教えてください。
WeakMap に関する MDN ドキュメントを読んでいます。そして、構文について言及しています:
new WeakMap([iterable])
しかし、これを試したところ、エラーが発生しました:
var arr = [{a:1}];
var wm1 = new WeakMap(arr);
キャッチされていない TypeError: 無効な値が弱いマップ キーとして使用されました
配列を介してそれを行う方法の例を教えてください。
ドキュメントには次のように記載されています。
Iterable は、要素がキーと値のペア (2 要素の配列) である配列またはその他の反復可能なオブジェクトです。
{a: 1}
は、2 要素配列ではなく、オブジェクトです。
さらに下には次のように書かれています。
WeakMap のキーは Object 型のみです。
そのため、文字列を のキーとして使用することはできませんWeakMap
。
試す:
var obj = {a:1};
var arr = [[obj, 1]];
var wm1 = new WeakMap(arr);
console.log(wm1.has(obj));
のような 2D 配列が必要です[[key1, value1], [key2, value2]]
。キーがないため、ここでは WeakSet がより適切です。
MDNから
Iterable は、要素がキーと値のペア (2 要素の配列) である配列またはその他の反復可能なオブジェクトです。
と
キーはオブジェクトでなければならず、値は任意の値にすることができます。
そう:
var o = {a:1};
var arr = [[o, 10]];
var wm1 = new WeakMap(arr);