One practical use-case of Object.create(null)

Sometimes, you see Object.create(null) and don't understand why not just using {}.

After more than ten years of using javascript, I have found a relevant bug I had to use Object.create(null).

Problem

The client provides a string key and arbitrary value, you want to store list of values in an object indexed by that key. That's a simple task.

I naively do this:

const store = {}
;(store[key] ??= []).push(value)

What do you think? Does this seem good?? The answer is NO. What?? See next.


Rationale

The problem comes from the fact that I initialized store as {}, an instance from Object class. store[key] checks for properties of the store object itself, if not found, it tries to find the property in its prototype chain, i.e. from Object.prototype whose keys such as constructor is not null.

To avoid this problem, you must initialize store without a prototype chain.


Happy coding and your javascript life!