Às vezes, quando você deseja usar um objeto JavaScript como um mapa hash (exclusivamente para armazenar dados), você pode querer criá-lo:
var data = Object.create(null);
A diferença do simples var data = {}
é que você obteria um objeto “limpo” que não herda de nada (ou seja, sem protótipo). O efeito? Ela terá absolutamente nenhum propriedades , nem mesmo constructor
, toString
, hasOwnProperty
, etc. assim que você é livre para usar essas chaves em sua estrutura de dados se você precisa.
Exemplo
var map1 = {},
map2 = Object.create(null);
map1.constructor
// function Object() { [native code] }
map2.constructor
// undefined
Claro que você não deveria usar palavras-chave reservadas em seu código, mas e se você precisar construir um mapa de elementos com chaves arbitrárias que são inseridas pelo usuário ou vêm de uma API de terceiros? É aí que Object.create(null)
pode ajudar!
Notas
Object.create()
foi introduzido no ES5 [Compatibilidade]- ES6 irá apresentar novas estruturas: Mapa, Mapa Fraco e Conjunto