Использование элемента в качестве ключа к хэшу в JavaScript
Я хочу создать хэш с элементами 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
?
Обратите внимание, что я не могу использовать необработанную строку идентификатора в качестве ключа, потому что любой произвольный Element
могут быть переданы, в том числе без идентификатора.
1 ответ
В JavaScript до ES 6 в качестве ключа могут использоваться только строки. Если вы хотите использовать элементы DOM, используйте два связанных списка или WeakMap
объект. Преимущество последнего метода заключается в том, что он не вызывает утечек памяти.
Применительно к вашему примеру:
var hash = new WeakMap();
hash.set(document.getElementById('foo'), 'bar');
hash.get(document.getElementById('foo')); // returns 'bar'
На момент написания WeakMap
поддерживается только следующими браузерами:
- Firefox 6
- Chrome 19 (по умолчанию отключено, см. Инструкции по включению)
- Opera 15 (по умолчанию отключено, запустите Opera с
--js-flags=--harmony
чтобы включить его). - Internet Explorer 11 ( подтверждено существование в утечке сборки)
Во всех других браузерах поддержка WeakMap может быть достигнута путем загрузки полифайла WeakMap.js.