8

我想创建一个以 DOM 元素为键的哈希。下面的代码说明了这一点:

var hash = {};
var set = function(element, value) {  hash[element] = value; };
var get = function(element)        {  return hash[element];  };

set(document.getElementById('foo'), 'bar');
get(document.getElementById('foo')); // returns 'bar'

如何确保 hash 映射到每个的唯一值Element
请注意,我不能使用原始 ID 字符串作为键,因为Element可以传入任意任意值,包括那些没有 id 的字符串。

4

1 回答 1

9

在 ES 6 之前的 JavaScript 中,只有字符串可以用作键。如果你想使用 DOM 元素,要么使用两个链表,要么使用WeakMap对象。后一种方法的一个好处是它不会导致内存泄漏。

应用于您的示例:

var hash = new WeakMap();
hash.set(document.getElementById('foo'), 'bar');
hash.get(document.getElementById('foo')); // returns 'bar'

在撰写本文时,WeakMap仅以下浏览器支持:

在所有其他浏览器中,可以通过加载WeakMap.js polyfill来实现对 WeakMap 的支持。

于 2013-06-23T20:57:15.027 回答