请参阅以下示例,如果我使用Map
代替WeakMap
,会有什么不同吗?
let map = new WeakMap();
let el = document.getElementById('hplogo');
map.set(el, 'reference');
console.log(map.get(el)); // 'reference'
// Remove the reference
el.parentNode.removeChild(el);
el = null;
console.log(map.get(el)); // undefined
let map = new Map();
let el = document.getElementById('hplogo');
map.set(el, 'reference');
console.log(map.get(el)); // 'reference'
// Remove the reference
el.parentNode.removeChild(el);
el = null;
console.log(map.get(el)); // undefined
此外,使用Map时,以下代码输出似乎令人困惑。
let map = new Map();
let el = document.getElementById('hplogo');
map.set(el, 'reference');
console.log(map); // Map object
console.log(map.get(el)); // 'reference'
// Remove the reference
el.parentNode.removeChild(el);
el = null;
console.log(map); // Map object
console.log(map.get(el)); // undefined
即使删除了引用,map对象看起来也是如此。
Map(1) {img#hplogo => "reference"}
但是map.get(el)会注销undefined