ExpertiDict

JavaScript · Avançado · Português · Técnico

objeto sem protótipo

/obˈʒɛtu sẽj pɾoˈtɔtʃipu/substantivo

Objeto criado com Object.create(null), que não herda de Object.prototype e por isso não tem toString nem hasOwnProperty. Serve como dicionário puro, livre de chaves herdadas.

Onde usar

Usado como mapa de contagem ou cache cujas chaves vêm de fora, evitando colisão com nomes como constructor e __proto__. Em code review, também é defesa contra prototype pollution, embora Map costume ser alternativa melhor.

Em código

const dic = Object.create(null);
dic.constructor = 1; // chave comum
console.log(dic.toString); // undefined
console.log(Object.hasOwn(dic, 'k'));
// false

Exemplos

Usei um objeto sem protótipo como dicionário de contagem.

Com Object.create(null), a chave constructor é só mais uma chave.

Cuidado

Chamar métodos de Object.prototype nele, como obj.hasOwnProperty(k), que dá TypeError; o certo é Object.hasOwn(obj, k).

Sinônimos

Object.create(null), dicionário puro

Veja também

Todos os termos de JavaScript