我想用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的那些。
答案 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
仅受以下浏览器支持:
--js-flags=--harmony
启动Opera以启用它)。在所有其他浏览器中,可以通过加载WeakMap.js polyfill来实现WeakMap支持。