使用Element作为JavaScript中Hash的键

Kev*_*tre 6 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'
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*b W 7

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

适用于您的示例:

var hash = new WeakMap();
hash.set(document.getElementById('foo'), 'bar');
hash.get(document.getElementById('foo')); // returns 'bar'
Run Code Online (Sandbox Code Playgroud)

编写时,WeakMap仅支持以下浏览器:

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

  • _"因为该技术的规范尚未稳定,请查看兼容性表格以了解各种浏览器的使用情况.另请注意,随着规范的变化,实验技术的语法和行为可能会在未来版本的浏览器中发生变化."_ (3认同)