Remover propriedade de objeto JavaScript

Neste artigo você vai aprender a remover propriedade de objeto JavaScript, ou seja, deletar a propriedade de um objeto de forma nativa em JS

A partir dessa linha a propriedade deixa de existir no objeto

O delete retorna true em praticamente todos os casos, inclusive quando a propriedade nem existia, e retorna false apenas quando a propriedade é própria e não configurável, fora do modo estrito

Em modo estrito, esse mesmo caso lança TypeError

Dois avisos que valem ouro: o delete só age em propriedades próprias (se houver uma de mesmo nome no protótipo, o objeto passa a usar a do protótipo) e, em arrays, ele não altera o length e deixa um espaço vazio, então pra array o certo é splice()

Remover propriedade de objeto JavaScript capa

Conteúdo também disponível em vídeo:

Fala programador(a), beleza? Bora aprender mais sobre objetos e suas propriedades em JavaScript

Para deletar ou remover propriedades de objetos em JavaScript temos a instrução delete

Podemos utilizar ela em conjunto com a propriedade e a mesma será removida

Veja um código com exemplo prático:

var obj = {
  nome: "Matheus",
  idade: 29
}
delete obj.nome;
console.log(obj); // { idade: 29 }

Perceba que o objeto é inicializado com duas propriedades: nome e idade

Depois executamos o operador de delete na propriedade nome do objeto que é referenciado pela variável obj

E então quando exibimos seu conteúdo com console.log, apenas a propriedade idade é encontrada

Pois a propriedade nome foi removida após a interpretação da instrução delete, legal né?

Desta maneira podemos deletar qualquer chave dos nossos objetos, independente se os mesmos se encontrem dentro de arrays, por exemplo

Você deve apenas utilizar delete com o nome da chave! =)

Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 120 aulas
  • 4 projetos
  • 9h 45min

Conclusão

Neste artigo vimos como remover propriedade de objeto JavaScript

Apenas precisamos utilizar a instrução de delete em uma das propriedades do objeto alvo

Após esta instrução a propriedade não constará mais no objeto

Apenas tome cuidado que alguns objetos não permitem a edição de suas propriedades, neste caso elas também não poderão ser deletadas

Geralmente objetos que são criados pela própria linguagem possuem esta restrição

Nestes casos a melhor abordagem seria fazer uma validação, caso a propriedade fosse utilizada ou partir para outra opção

Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube

O que o delete retorna?

O delete devolve true em praticamente todo caso

Inclusive quando a propriedade nem existia no objeto: ele não faz nada e ainda assim retorna true

O único caso de false é quando a propriedade é própria e não configurável, e mesmo assim só fora do modo estrito

var obj = { nome: "Matheus" }

console.log(delete obj.nome)      // true
console.log(delete obj.sobrenome) // true, mesmo sem existir

Em modo estrito a história muda: tentar deletar uma propriedade própria não configurável lança TypeError, em vez de retornar false

Ou seja, se tu escreve com "use strict", o erro estoura na tua cara em vez de passar batido, o que é bom =)

delete em array: cuidado com o buraco

Aqui mora a pegadinha clássica

Usar delete em um elemento de array NÃO altera a propriedade length, e ainda deixa um espaço vazio (empty slot) na posição


console.log(arr.length) // 3

Isso vale até quando tu deleta o último elemento: o length continua o mesmo

A própria documentação do operador dá o caminho certo: se o objetivo é remover o elemento alterando o conteúdo do array, usa splice()

E se o elemento deve continuar existindo, só que sem valor, atribui undefined pra ele


arr.splice(1, 1)   // remove de verdade

Tome cuidado com isso, array esparso é o tipo de coisa que passa no console e quebra no forEach depois…

A propriedade continua aparecendo depois do delete?

Se isso aconteceu, provavelmente ela não é do teu objeto

O delete só age sobre propriedades próprias (own properties)

Quando existe uma propriedade de mesmo nome na cadeia de protótipos, o objeto simplesmente passa a usar a versão do protótipo depois da remoção

Parece que o delete não funcionou, mas funcionou: tu removeu a de cima e apareceu a de baixo

Pra sumir de vez, o delete tem que ser feito no próprio protótipo

É tipo tirar o papel de cima da pilha e achar que a mesa ficou vazia, sendo que tinha outro papel embaixo

Como remover uma propriedade sem alterar o objeto original?

O delete é destrutivo, ele mexe no objeto que tu passou

Se tu trabalha com React, Redux, state imutável e por aí vai, o caminho é outro: desestruturação com rest

const obj = { nome: "Matheus", idade: 29, cidade: "Pelotas" }

const { nome, ...rest } = obj

console.log(rest) // { idade: 29, cidade: "Pelotas" }
console.log(obj)  // segue intacto

A desestruturação com rest copia pra um novo objeto todas as propriedades próprias enumeráveis que não foram capturadas no padrão

Ou seja: tu "remove" o nome sem tocar no original

As propriedades rest e spread de objeto entraram no ECMAScript 2018, publicado em junho de 2018, então é sintaxe bem estabelecida hoje

E fora do objeto comum: Reflect e Map

Tem duas formas que valem conhecer

O Reflect.deleteProperty() é o equivalente do operador delete em forma de função

Reflect.deleteProperty(obj, "nome")

Ele está classificado como Baseline Widely available e roda nos navegadores desde setembro de 2016, então tu pode usar sem medo

Útil quando tu precisa passar a remoção como função, dentro de um map, de um proxy, essas coisas

Já se o teu dado está em um Map, o método é o delete dele mesmo:

map.delete("chave")

Ele retorna true se a entrada foi removida e false se a chave não foi encontrada

Map está nos navegadores desde julho de 2015 e também é Baseline Widely available

delete deixa o código mais lento?

Essa é boa, e a resposta honesta é: pode deixar

No V8, o motor do Chrome e do Node, objetos que sofrem remoção de propriedades podem passar a usar o chamado modo dicionário (slow properties)

Nesse modo os inline caches não funcionam e o acesso às propriedades fica mais lento que nas fast properties

Não é motivo pra nunca usar delete, beleza?

É motivo pra pensar duas vezes antes de sair deletando propriedade dentro de laço quente ou em objeto que é lido milhares de vezes

Nesses casos, gerar um objeto novo com rest costuma ser a escolha mais tranquila

Erros comuns com o delete

Dois tropeços clássicos

O primeiro: usar delete em uma variável

var x = 10
delete x

Aplicar o delete a um nome não qualificado é erro de sintaxe em modo estrito

Caso este erro apareça: SyntaxError: applying the ‘delete’ operator to an unqualified name is deprecated

O delete é pra propriedade de objeto, não pra variável

O segundo: tentar deletar propriedade que a linguagem protege

O Math.PI é o exemplo perfeito, os atributos dele são não gravável, não enumerável e não configurável

delete Math.PI // não remove nada

A regra por trás é essa: propriedade própria não configurável não sai com delete, ponto

Esse post nasceu junto com a aula 21 da playlist de JavaScript aqui do canal, e o cenário do vídeo é bem o do dia a dia

Montei um mini projeto do zero: um index.html só de casca, um arquivo .js linkado nele e nada mais, sem nenhum controle de HTML, JavaScript puro mesmo

Criei o objeto com as propriedades nome e idade, abri com o Live Server e joguei dois console.log: um antes do delete e um depois

O de antes mostra o objeto completo, o de depois mostra o objeto sem a chave que eu removi

É o teste mais bobo do mundo e é justamente por isso que ele ensina: tu vê a propriedade sumir na tua frente, no console, sem framework nenhum no meio

Faça o teste aí também, leva dois minutos =)

O que ainda quero medir com calma em vídeo é o efeito do modo dicionário do V8 em objeto que sofre delete repetido, comparando com a criação de um objeto novo via rest, porque isso só fica honesto com medição na mão

Perguntas frequentes

Como remover uma propriedade de um objeto em JavaScript?

Com o operador delete: delete obj.nome remove a propriedade nome do objeto obj

O que o delete retorna?

Retorna true em praticamente todos os casos, inclusive quando a propriedade não existia (nesse caso ele não tem efeito algum e mesmo assim retorna true)

Retorna false somente quando a propriedade é própria e não configurável, e apenas fora do modo estrito

O delete dá erro em modo estrito?

Dá, em dois casos

Deletar uma propriedade própria não configurável lança TypeError em vez de retornar false

E aplicar o delete a um nome não qualificado, como delete x em uma variável, é erro de sintaxe: SyntaxError: applying the ‘delete’ operator to an unqualified name is deprecated

Por que a propriedade continua aparecendo depois do delete?

Porque o delete só remove propriedades próprias

Se existir uma propriedade de mesmo nome na cadeia de protótipos, o objeto passa a usar a versão do protótipo depois da remoção

Pra ela sumir de vez, é preciso deletar a propriedade no próprio protótipo

Posso usar delete para remover um item de array?

Pode, mas quase nunca é o que tu quer

O delete em um elemento de array não altera a propriedade length e deixa um espaço vazio na posição, mesmo se for o último elemento

A orientação da documentação é usar splice() quando o objetivo é remover o elemento alterando o conteúdo do array, e atribuir undefined quando o elemento deve continuar existindo com valor indefinido

Como remover uma propriedade sem alterar o objeto original?

Com desestruturação e rest: const { nome, …rest } = obj

O rest recebe em um novo objeto todas as propriedades próprias enumeráveis que não foram capturadas no padrão, e o objeto original segue intacto

Essa sintaxe de rest e spread de objeto entrou no ECMAScript 2018, publicado em junho de 2018

Existe uma versão em função do delete?

Existe, é o Reflect.deleteProperty(obj, "nome")

Ele é o equivalente do operador delete em forma de função e está classificado como Baseline Widely available, disponível nos navegadores desde setembro de 2016

Como remover uma chave de um Map?

Com map.delete(chave)

Ele retorna true se a entrada foi removida e false se a chave não foi encontrada

O método é Baseline Widely available e está nos navegadores desde julho de 2015

Existe propriedade que não dá pra deletar?

Sim, propriedade própria não configurável não sai com delete

O Math.PI é o exemplo real: os atributos dele são não gravável, não enumerável e não configurável, então o delete não remove nada ali

Usar delete deixa o código mais lento?

Pode deixar

No V8, objetos que sofrem remoção de propriedades podem passar a usar o modo dicionário (slow properties), onde os inline caches não funcionam e o acesso às propriedades fica tipicamente mais lento que nas fast properties

Em código quente, gerar um objeto novo com rest costuma ser a alternativa mais tranquila

O delete funciona em qual versão do JavaScript?

O delete é operador da própria linguagem e está presente em qualquer ambiente JavaScript atual

A versão atual do padrão é o ECMAScript 2026 (ECMA-262, 17ª edição), aprovado em 30 de junho de 2026 na 131ª Assembleia Geral da Ecma International, em Genebra

Leia também

Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares