I understand that using Object.create(null)
creates an object which has no proto
property (i.e. Object.getPrototypeOf( myObj ) === null
In very rare instances where something may have been added to Object.prototype
Object.prototype.bar = 'bar';
It may be better to create an Object with Object.create(null)
as it won't inherit this, consider
({}).bar; // bar
// vs
Object.create(null).bar; // undefined
This means you don't have to worry for example if you've used a for..in
loop
Furthermore, you can make it so you fail instanceof
tests
Object.create(null) instanceof Object; // false
This is because instanceof
is basically testing the prototype chain against the RHS, and there is no such chain.
You can use such an object for a key-value map. Without the prototype chain, you can be sure that things like .toString()
do not unwittingly exist on the object. That means you can incautiously access properties on it, and you can use the in
operator instead of Object.prototype.hasOwnProperty.call
.