Implement the Map and Set collection built-ins.
Scope#
Map#
Map()constructor (optionally from iterable of [key, value] pairs)Map.prototype.set(key, value)— returns the Map (for chaining)Map.prototype.get(key)— returns value or undefinedMap.prototype.has(key)— returns booleanMap.prototype.delete(key)— returns booleanMap.prototype.clear()Map.prototype.size(getter)Map.prototype.forEach(callback, thisArg?)Map.prototype.keys(),values(),entries()— return iteratorsMap.prototype[Symbol.iterator]()— same as entries()- Key equality: SameValueZero (like === but NaN === NaN)
- Keys can be any value type (objects, primitives)
- Insertion order preserved
WeakMap (basic)#
WeakMap()constructorget,set,has,delete- Keys must be objects (not primitives)
- Entries are weakly held (GC can collect if no other references)
Set#
Set()constructor (optionally from iterable)Set.prototype.add(value)— returns the SetSet.prototype.has(value)— returns booleanSet.prototype.delete(value)— returns booleanSet.prototype.clear()Set.prototype.size(getter)Set.prototype.forEach(callback, thisArg?)Set.prototype.keys(),values(),entries()— return iteratorsSet.prototype[Symbol.iterator]()— same as values()- Value equality: SameValueZero
- Insertion order preserved
WeakSet (basic)#
WeakSet()constructoradd,has,delete- Values must be objects
Acceptance Criteria#
- Map stores and retrieves key-value pairs correctly
- Map preserves insertion order
- Map handles object keys and NaN key equality
- Set stores unique values correctly
- Set preserves insertion order
- WeakMap/WeakSet accept only object keys/values
- Iterators (keys, values, entries) work correctly
- forEach works with proper this binding
- Unit tests for all methods and edge cases
Phase 10 — JavaScript Engine (issue 12 of 15). Depends on: JS core built-ins.