我一直在阅读有关 WeakMap 的 MDN 文档。它提到了语法:
new WeakMap([iterable])
但是当我尝试这个时,发生了错误:
var arr = [{a:1}];
var wm1 = new WeakMap(arr);
未捕获的类型错误:用作弱映射键的无效值
您能否提供一个有关如何通过数组执行此操作的示例?
我一直在阅读有关 WeakMap 的 MDN 文档。它提到了语法:
new WeakMap([iterable])
但是当我尝试这个时,发生了错误:
var arr = [{a:1}];
var wm1 = new WeakMap(arr);
未捕获的类型错误:用作弱映射键的无效值
您能否提供一个有关如何通过数组执行此操作的示例?
文档说:
Iterable 是一个数组或其他可迭代对象,其元素是键值对(2 元素数组)。
{a: 1}
是一个对象,而不是一个 2 元素数组。
再往下说:
WeakMaps 的键仅属于 Object 类型。
因此,您不能将字符串用作WeakMap
.
尝试:
var obj = {a:1};
var arr = [[obj, 1]];
var wm1 = new WeakMap(arr);
console.log(wm1.has(obj));
你需要一个二维数组,比如[[key1, value1], [key2, value2]]
. 由于您没有密钥,因此 WeakSet 在这里更合适。
来自MDN
Iterable 是一个数组或其他可迭代对象,其元素是键值对(2 元素数组)。
和
键必须是对象,值可以是任意值。
所以:
var o = {a:1};
var arr = [[o, 10]];
var wm1 = new WeakMap(arr);