A WeakMap is just like a normal Map with a few key differences:
- a WeakMap can only contain objects as keys,
- a WeakMap is not iterable which means it can’t be looped and
- a WeakMap does not have a .clear() method.
Below example shows how to create a WeakMap, it just like you would a normal Map, except that you use the WeakMap constructor.
const book1 = { title: ‘book 1’, author: ‘author 1’ };
const book2 = { title: ‘book 2’, author: ‘author 2’};
const book3 = { title: ‘book 3’, author: ‘author 3’ };const library = new WeakMap();
library.set(book1, true);
library.set(book2, false);
library.set(book3, true);console.log(library);
Output:
WeakMap {Object {title: ‘book 1’, author: ‘author 1’ => true, Object {title: ‘book 2’, author: ‘author 2’} => false, Object {title: ‘book 3’, author: ‘author 3’} => true}
…but if you try to add something other than an object as a key, you’ll get an error!
library.set(‘book 4’, false);
Uncaught TypeError: Invalid value used as weak map key(…)
This is because WeakMap can only contain objects as keys. WeakMaps leverage garbage collection for easier use and maintainability.