Map — tập cặp key–value, thay cho việc dùng object làm dictionary:
- Key bất kỳ kiểu (object, function, số...), không như object (key luôn ép về string/symbol).
- Giữ đúng thứ tự chèn khi duyệt.
- Có
.size, và các methodset/get/has/delete; duyệt trực tiếp bằngfor...of. - Không có key kế thừa từ prototype → tra cứu an toàn, không đụng
'toString','__proto__'. - Thêm/xóa key thường xuyên hiệu quả hơn object.
Set — tập giá trị không trùng lặp:
- Tự loại trùng;
has()kiểm tra tồn tại nhanh (O(1) trung bình) thay vìarray.includes()(O(n)). - Khử trùng mảng gọn:
[...new Set(arr)].
Khi nào dùng object/array: cần serialize JSON (Map/Set không stringify thẳng được), hoặc dữ liệu có cấu trúc cố định như một record. Dùng Map khi key động/không phải string hoặc cần thứ tự + kích thước; dùng Set khi cần tính duy nhất và kiểm tra thành viên nhanh.
Ghi chú: WeakMap/WeakSet giữ tham chiếu yếu tới key là object → không chặn thu gom rác, hợp cache gắn theo vòng đời object.