Map vs WeakMap
Cơ chế tương tự nhưng có khác biệt quan trọng:
- Key: WeakMap chỉ chấp nhận object làm key. Map chấp nhận thêm primitive (string, number...).
- Garbage Collection: WeakMap key yếu (weak reference) - nếu object key không còn reference khác → GC thu gom, entry biến mất. Map giữ strong reference → có method
keys(),size. - Size: WeakMap không có property size.
Map
Liên kết key-value với mọi kiểu dữ liệu.
Ví dụ
<html> <body> <script> var map = new Map(); var objKey = {name: 'tutorialspoint'}; map.set('first', 'a'); map.set(3, ['c']); map.set(objKey, 3); map.set(['add', 'mapping'], 'd'); document.write(map.has(2) + "<br>"); document.write(map.has('first') + "<br>"); document.write(map.get('first') + "<br>"); document.write(map.get(objKey) + "<br>"); document.write(map.get('empty') + "<br>"); document.write(map.size + "<br>"); map.clear(); document.write(map.size); </script> </body> </html>
Kết quả
false true a 3 undefined 4 0
WeakMap
Chỉ key object, không có size, không liệt kê key được.
Ví dụ
<html> <body> <script> var weakMap = new WeakMap(); var obj4 = {d: 4}; var obj5 = {e: 5}; weakMap.set(obj4, 'fourth'); weakMap.set(obj5, 'fifth'); weakMap.set(function(){}, 7); document.write(weakMap.has(obj4) + "<br>"); document.write(weakMap.get(obj4) + "<br>"); document.write(weakMap.delete(obj4) + "<br>"); weakMap.clear(); </script> </body> </html>
Kết quả
true fourth true