Verificando se um objeto possui uma propriedade com `hasOwnProperty`

Descubra como usar o método hasOwnProperty() para verificar se um objeto em JavaScript contém uma propriedade específica, sem herdar propriedades da cadeia de protótipos.

Como verificar se um objeto possui uma propriedade (hasOwnProperty)?

Em JavaScript, objetos são estruturas chave-valor que armazenam dados. No entanto, ao trabalhar com objetos, é importante saber se uma propriedade específica existe ou foi definida no objeto. O método hasOwnProperty() é uma maneira útil de verificar se um objeto tem uma propriedade própria, ou seja, uma propriedade que ele possua diretamente, e não uma propriedade herdada de sua cadeia de protótipos.

Sintaxe do hasOwnProperty()

A sintaxe básica do método hasOwnProperty() é simples e funciona da seguinte maneira:

objeto.hasOwnProperty(propriedade);
  • objeto: o objeto no qual você deseja verificar a existência da propriedade.
  • propriedade: o nome da propriedade que você está verificando, passado como uma string.

Exemplo básico de uso do hasOwnProperty()

O hasOwnProperty() retorna true se a propriedade existir diretamente no objeto e false caso contrário. Esse método não verifica propriedades herdadas de objetos no protótipo.

Exemplo de código:

let pessoa = {
  nome: 'João',
  idade: 25
};
console.log(pessoa.hasOwnProperty('nome'));  // Exibe true
console.log(pessoa.hasOwnProperty('cidade'));  // Exibe false

Aqui, hasOwnProperty('nome') retorna true porque o objeto pessoa tem a propriedade nome. Já hasOwnProperty('cidade') retorna false porque a propriedade cidade não existe no objeto.

Características do hasOwnProperty()

  • Verifica propriedades próprias: Só retorna true para propriedades que pertencem diretamente ao objeto, e não para aquelas herdadas do protótipo.
  • Não altera o objeto: O método não modifica o objeto, apenas retorna um valor booleano.
  • Método seguro: Ao contrário de acessar a propriedade diretamente, hasOwnProperty() evita problemas com propriedades herdadas ou sobrescritas.

Usando hasOwnProperty() em objetos com protótipos

Uma das principais vantagens de hasOwnProperty() é que ele evita que propriedades herdadas da cadeia de protótipos sejam confundidas com propriedades próprias do objeto.

Exemplo com herança de protótipo:

function Pessoa(nome, idade) {
  this.nome = nome;
  this.idade = idade;
}
Pessoa.prototype.cidade = 'São Paulo';

let pessoa1 = new Pessoa('João', 25);
console.log(pessoa1.hasOwnProperty('nome'));  // Exibe true
console.log(pessoa1.hasOwnProperty('cidade'));  // Exibe false

Neste exemplo, a propriedade cidade é definida no protótipo de Pessoa, mas não diretamente no objeto pessoa1. Portanto, hasOwnProperty('cidade') retorna false, pois a propriedade cidade é herdada, e não é uma propriedade direta de pessoa1.

Comparando hasOwnProperty() com in

Outra maneira de verificar se uma propriedade existe em um objeto é usando o operador in. No entanto, ao contrário de hasOwnProperty(), o operador in verifica todas as propriedades, incluindo as herdadas.

Exemplo de código com in:

let pessoa = {
  nome: 'João',
  idade: 25
};
console.log('nome' in pessoa);  // Exibe true
console.log('cidade' in pessoa);  // Exibe false

Aqui, o operador in funciona de forma semelhante ao hasOwnProperty(), mas ele também verifica as propriedades herdadas.

Diferenças importantes entre hasOwnProperty() e in

Método O que verifica Considera propriedades herdadas?
hasOwnProperty() Verifica se a propriedade é própria do objeto Não
in Verifica se a propriedade existe no objeto ou na cadeia de protótipos Sim

Quando usar hasOwnProperty()?

  • Use hasOwnProperty() quando você precisar garantir que a propriedade que está verificando é própria do objeto, e não herdada de seu protótipo.
  • Evite usar hasOwnProperty() para verificar propriedades que você sabe que são do objeto, mas que podem ser herdadas na cadeia de protótipos.

Conclusão

O método hasOwnProperty() é uma ferramenta poderosa para garantir que você está lidando com propriedades próprias de um objeto e não com propriedades herdadas de seu protótipo. Ele é especialmente útil em cenários de herança de objetos, onde o objeto pode ter propriedades herdadas que você não deseja contar. Saber quando e como usar hasOwnProperty() pode tornar seu código mais robusto e confiável.

Quando você está trabalhando com objetos em JavaScript, é fundamental ter controle sobre as propriedades que estão diretamente no objeto, e não nas suas cadeias de protótipos. Usar hasOwnProperty() ajuda a garantir que você está acessando propriedades próprias, e não herdadas, evitando erros ao manipular objetos com herança. Isso é especialmente importante ao lidar com objetos complexos ou ao fazer loops sobre objetos, onde a distinção entre propriedades próprias e herdadas pode ser confusa. Entender a diferença entre hasOwnProperty() e outros métodos como in pode ajudar a escrever código mais limpo e eficiente.

Algumas aplicações:

  • Evitar acessar propriedades herdadas de objetos prototípicos ao iterar sobre propriedades de um objeto.
  • Garantir que dados manipulados no código sejam provenientes diretamente do objeto e não de um protótipo.
  • Implementar validações em objetos, verificando se uma propriedade existe antes de realizar ações com ela.
  • Usar em estruturas como loops for...in para filtrar propriedades herdadas e evitar bugs.

Dicas para quem está começando

  • Use hasOwnProperty() sempre que precisar garantir que está verificando uma propriedade diretamente no objeto, e não no protótipo.
  • Quando estiver iterando sobre objetos, use hasOwnProperty() dentro de loops for...in para evitar problemas com propriedades herdadas.
  • Se você só precisa verificar se uma propriedade existe, e não se ela é própria, o operador in pode ser mais simples.
  • Lembre-se de que hasOwnProperty() retorna false para propriedades herdadas, então não se esqueça de validar que está acessando a propriedade corretamente.

Contribuições de Lucas Souza

Compartilhe este tutorial: Como verificar se um objeto possui uma propriedade (hasOwnProperty)?

Compartilhe este tutorial

Continue aprendendo:

Como adicionar, remover e modificar propriedades de um objeto?

Descubra como adicionar, remover e modificar propriedades de objetos em JavaScript para criar soluções dinâmicas e interativas.

Tutorial anterior

Como copiar um objeto sem referência (Object.assign e spread operator)?

Descubra como copiar objetos em JavaScript sem referência usando `Object.assign()` e o spread operator para evitar modificações indesejadas no objeto original.

Próximo tutorial