如何使用数组作为参数来新建 WeakMap?
How to new WeakMap with array as parameter?
我一直在阅读有关 WeakMap 的 MDN 文档。
它提到了语法:
new WeakMap([iterable])
但是当我尝试这样做时,发生了错误:
var arr = [{a:1}];
var wm1 = new WeakMap(arr);
Uncaught TypeError: Invalid value used as weak map key
你能给我一个关于如何通过数组来实现的例子吗?
你需要一个二维数组,比如[[key1, value1], [key2, value2]]
。由于您没有密钥,WeakSet 在这里更合适。
来自MDN
Iterable is an Array or other iterable object whose elements are
key-value pairs (2-element Arrays).
和
The keys must be objects and the values can be arbitrary values.
所以:
var o = {a:1};
var arr = [[o, 10]];
var wm1 = new WeakMap(arr);
文档说:
Iterable is an Array or other iterable object whose elements are key-value pairs (2-element Arrays).
{a: 1}
是一个对象,不是 2 元素数组。
再往下写:
Keys of WeakMaps are of the type Object only.
所以你不能在 WeakMap
.
中使用字符串作为键
尝试:
var obj = {a:1};
var arr = [[obj, 1]];
var wm1 = new WeakMap(arr);
console.log(wm1.has(obj));
我一直在阅读有关 WeakMap 的 MDN 文档。 它提到了语法:
new WeakMap([iterable])
但是当我尝试这样做时,发生了错误:
var arr = [{a:1}];
var wm1 = new WeakMap(arr);
Uncaught TypeError: Invalid value used as weak map key
你能给我一个关于如何通过数组来实现的例子吗?
你需要一个二维数组,比如[[key1, value1], [key2, value2]]
。由于您没有密钥,WeakSet 在这里更合适。
来自MDN
Iterable is an Array or other iterable object whose elements are key-value pairs (2-element Arrays).
和
The keys must be objects and the values can be arbitrary values.
所以:
var o = {a:1};
var arr = [[o, 10]];
var wm1 = new WeakMap(arr);
文档说:
Iterable is an Array or other iterable object whose elements are key-value pairs (2-element Arrays).
{a: 1}
是一个对象,不是 2 元素数组。
再往下写:
Keys of WeakMaps are of the type Object only.
所以你不能在 WeakMap
.
尝试:
var obj = {a:1};
var arr = [[obj, 1]];
var wm1 = new WeakMap(arr);
console.log(wm1.has(obj));