JavaScript Internals (521 Qs)•Part 1: Core Objects, Prototypes, Functions & Scope (1 - 53)
How do you compare Object and Map
Objects and Maps both allow you to associate keys with values, retrieve those values, delete keys, and check if a key exists. Historically, Objects have been used as Maps, but there are several key differences that make Map a better choice in certain scenarios:
| Feature | Object | Map |
|---|---|---|
| Key Types | Only strings and symbols are valid keys | Any value can be used as a key (objects, functions, primitives) |
| Key Order | Keys are unordered (in practice, insertion order is mostly preserved for string keys, but not guaranteed) | Keys are ordered by insertion; iteration follows insertion order |
| Size Property | No built-in way to get the number of keys; must use Object.keys(obj).length | Use the .size property for the number of entries |
| Iterability | Not directly iterable; must use Object.keys, Object.values, or Object.entries | Directly iterable with for...of, .keys(), .values(), .entries() |
| Prototype | Has a prototype chain; may have default properties that can collide with custom keys (can be avoided with Object.create(null)) | Does not have a prototype, so there are no default keys |
| Performance | May be less efficient for frequent additions/removals | Optimized for frequent additions and deletions |
| Serialization | Can be easily serialized to JSON | Cannot be directly serialized to JSON |
Practical Code Example
javascript
// Object: String/Symbol keys only, no built-in size property
const obj = { name: 'Alice', age: 28 };
console.log(Object.keys(obj).length); // 2
// Map: Any key type (objects, functions, primitives), tracks insertion order
const map = new Map();
const userKey = { id: 101 };
map.set(userKey, 'Admin Profile');
map.set(42, 'Answer');
console.log(map.get(userKey)); // 'Admin Profile'
console.log(map.size); // 2
console.log(map.has(42)); // true