</>
⌕
Senior #map#set#weakmap#weakref#memory

Map, Set, WeakMap, WeakSet và WeakRef khác nhau thế nào?

⚡ Trả lời nhanh

`Map`/`Set` giữ thứ tự chèn, key là bất kỳ kiểu nào (so sánh SameValueZero). `WeakMap`/`WeakSet` chỉ nhận object làm key, giữ tham chiếu yếu nên không cản GC, không iterate được, không có `size`. `WeakRef` giữ tham chiếu yếu tới một object, `deref()` có thể trả undefined.

Ví dụ

main.js · sửa được
MapWeakMap
Kiểu keybất kỳobject (và symbol không đăng ký)
Giữ key sốngcókhông (weak)
Iterate / sizecókhông
Use casecache, đếm, key phức tạpmetadata gắn với object, private data
  • WeakMap phù hợp lưu dữ liệu phụ cho object (cache theo DOM node) mà không gây memory leak: object bị GC thì entry biến mất.
  • WeakRef + FinalizationRegistry dùng cho cache lớn có thể bị thu hồi; thời điểm GC không xác định nên không dựa vào chúng cho logic đúng sai.
  • Khác Object: Map không có key thừa kế từ prototype, key không bị ép thành string, size O(1), tối ưu cho thêm/xóa thường xuyên.
🃏 Ôn bằng flashcard