Removendo uma propriedade de um objeto JavaScript: 3 abordagens e armadilhas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

"A propriedade desapareceu, mas o objeto permaneceu": como remover o que não é necessário em JavaScript?

\n\n

Imagine a situação: você está trabalhando com um objeto grande que veio do servidor. Ele tem 20 campos, mas para enviar o formulário, você precisa apenas de 15. Ou você está escrevendo uma função que deve retornar dados sem o campo de serviço _id. O que fazer? A pergunta mais popular no Stack Overflow sobre este tópico tem centenas de milhares de visualizações — e não é por acaso.

\n\n

Remover uma propriedade de um objeto é uma daquelas tarefas que parecem triviais, mas escondem algumas surpresas. Neste artigo, vamos analisar todas as principais maneiras de remover uma propriedade de um objeto em JavaScript, comparar seu desempenho e mutabilidade, e descobrir qual abordagem escolher em 2025.

\n\n

Método nº 1: Operador delete — o clássico

\n\n

A maneira mais óbvia e historicamente a primeira é usar o operador delete. Ele remove a propriedade do objeto de forma definitiva e irreversível.

\n\n
const user = {\n  name: 'Ana',\n  email: 'ana@example.com',\n  password: 'super_secret_123'\n};\n\ndelete user.password;\n\nconsole.log(user);\n// { name: 'Ana', email: 'ana@example.com' }\nconsole.log(user.password); // undefined\n
\n\n

Como o delete realmente funciona?

\n\n

O operador delete não apenas atribui undefined. Ele remove completamente a propriedade do objeto. Você pode verificar isso usando o método hasOwnProperty:

\n\n
const car = { brand: 'Tesla' };\nconsole.log(car.hasOwnProperty('brand')); // true\n\ndelete car.brand;\nconsole.log(car.hasOwnProperty('brand')); // false\n
\n\n

Uma diferença importante: após o delete, a propriedade deixa de existir. Durante a iteração com for...in ou Object.keys(), ela não aparecerá.

\n\n

Quando o delete não funciona?

\n\n

Existem algumas "armadilhas":

\n\n
    \n
  • Não é possível remover propriedades declaradas com var/let/const. O operador delete funciona apenas com propriedades de objetos.
  • \n
  • Propriedades herdadas do protótipo não são removidas — apenas as próprias.
  • \n
  • Propriedades com a flag configurable: false (por exemplo, de objetos nativos) não são removidas. No modo estrito, isso causará um erro.
  • \n
\n\n
// Exemplo: propriedade com configurable: false\nconst obj = {};\nObject.defineProperty(obj, 'fixed', {\n  value: 42,\n  configurable: false\n});\n\ndelete obj.fixed; // false (não foi removida)\nconsole.log(obj.fixed); // 42\n
\n\n

Método nº 2: Desestruturação e operador rest — abordagem moderna

\n\n

Se você trabalha com dados imutáveis (e no JavaScript moderno isso é considerado uma boa prática), o delete pode não ser a melhor escolha — ele muta o objeto original. A alternativa é criar um novo objeto sem a propriedade indesejada usando desestruturação:

\n\n
const user = {\n  name: 'João',\n  email: 'joao@example.com',\n  role: 'admin',\n  token: 'abc123'\n};\n\n// Removendo o campo token, criando um novo objeto\nconst { token, ...userWithoutToken } = user;\n\nconsole.log(userWithoutToken);\n// { name: 'João', email: 'joao@example.com', role: 'admin' }\nconsole.log(user.token); // 'abc123' — objeto original não foi alterado!\n
\n\n

Esta abordagem é especialmente popular no desenvolvimento React, quando você precisa passar apenas parte das props para um componente, excluindo campos de serviço.

\n\n

Prós e contras da desestruturação

\n\n
    \n
  • + Imutabilidade: o objeto original permanece inalterado. Isso é importante para Redux, Vuex e programação funcional.
  • \n
  • + Legibilidade: fica claro quais campos estamos excluindo.
  • \n
  • - Desempenho: uma cópia do objeto é criada, o que para objetos grandes pode ser custoso.
  • \n
  • - Inconveniente para remover muitas propriedades: se você precisa remover 5 campos de 20,

Blogs

Book Recommendations