使用Element作为JavaScript中Hash的键

时间:2013-06-23 20:51:58

标签: javascript hashmap weakmap

我想用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'

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

1 个答案:

答案 0 :(得分:7)

在JavaScript中直到ES 6,只能使用字符串作为键。如果要使用DOM元素,请使用两个链接列表或WeakMap对象。后一种方法的一个好处是它不会导致内存泄漏。

应用于您的示例:

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

截至撰写时,WeakMap仅受以下浏览器支持:

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