Key của object thường luôn bị ép về chuỗi (hoặc Symbol).
Mọi object dùng làm key đều thành '[object Object]', nên các entry khác nhau ghi đè lẫn nhau.
js
const cache = {};
const u1 = { id: 1 };
const u2 = { id: 2 };
cache[u1] = 'a';
cache[u2] = 'b';
Object.keys(cache); // ['[object Object]'] — chỉ 1 key
cache[u1]; // 'b' — đã bị u2 ghi đè
cache[1] === cache['1']; // true — số cũng bị ép về chuỗiDùng Map khi:
- Key không phải chuỗi (object, số, hàm) — Map so khớp key bằng tham chiếu/giá trị gốc, không ép kiểu.
- Cần biết số lượng (map.size) và duyệt theo thứ tự chèn (for...of).
- Key do người dùng nhập, tránh đụng key kế thừa từ prototype (toString, constructor).
Dùng object thường khi key là chuỗi cố định do code quyết định (config, lookup table) và cần JSON.stringify trực tiếp — Map không serialize được bằng JSON.stringify.