2

WeakMap に関する MDN ドキュメントを読んでいます。そして、構文について言及しています:

new WeakMap([iterable])

しかし、これを試したところ、エラーが発生しました:

var arr = [{a:1}];
var wm1 = new WeakMap(arr);

キャッチされていない TypeError: 無効な値が弱いマップ キーとして使用されました

配列を介してそれを行う方法の例を教えてください。

4

3 に答える 3

5

ドキュメントには次のように記載されています。

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));

于 2018-07-25T09:27:21.753 に答える
3

のような 2D 配列が必要です[[key1, value1], [key2, value2]]。キーがないため、ここでは WeakSet がより適切です。

于 2018-07-25T09:26:36.830 に答える
0

MDNから

Iterable は、要素がキーと値のペア (2 要素の配列) である配列またはその他の反復可能なオブジェクトです。

キーはオブジェクトでなければならず、値は任意の値にすることができます。

そう:

var o = {a:1};
var arr = [[o, 10]];
var wm1 = new WeakMap(arr);
于 2018-07-25T09:27:21.030 に答える