Como verificar se objeto possui propriedade em JavaScript

Neste artigo você vai aprender a como verificar se objeto possui propriedade em JavaScript, de uma maneira super simples!

verificar se objeto possui propriedade capa

Fala programador(a), beleza? Bora aprender mais sobre objetos e também a linguagem JavaScript!

Para checara objetos podemos utilizar o operador in, ele serve para outros casos também

Mas para objetos é possível identificar se uma propriedade existe ou não no objeto

Adicionando uma estrutura de condição if, podemos validar o caso

Veja um exemplo prático do que foi explicado acima:

var obj = {
	name: "Matheus",
  age: 29
};

if('name' in obj) {
	console.log("Existe!");
}

Neste caso o if é atestado como true, pois a propriedade name existe na variável obj

Então assim conseguimos validar se uma propriedade existe ou não em um objeto

Note que podemos adicionar um else e fazer uma outra continuação de código, caso a chave não exista

Formação Claude Code
Formação Recomendada

Formação Claude Code

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

  • 118 aulas
  • 4 projetos
  • 9h 33min

E desta forma conseguimos validar chaves em objetos de JavaScript!

Uma outra abordagem seria utilizar o método hasOwnProperty

Veja a sua aplicação na prática:

var obj = {
	name: "Matheus",
  age: 29
};

if(obj.hasOwnProperty('name')) {
	console.log("Existe!");
}

Desta maneira obtemos o mesmo resultado, porém com uma outra abordagem!

Conclusão

Neste artigo você aprendeu a como verificar se objeto possui propriedade em JavaScript

Utilizamos o operador in, que pode ser utilizado entre chave e objeto

Atestando se uma propriedade existe ou não em um determinado objeto que está no nosso código

Podemos fazer a validação com um simples if/else

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

in ou hasOwnProperty: qual a diferença?

Os dois respondem a mesma pergunta, só que não olham pro mesmo lugar

O operador in procura a chave no objeto E em toda a cadeia de protótipos dele

Já o hasOwnProperty só enxerga o que é do PRÓPRIO objeto

Parece detalhe, mas muda o resultado:

var obj = {
name: "Matheus"
};

console.log('toString' in obj); // true
console.log(obj.hasOwnProperty('toString')); // false

"Que toString?" é um método que vem do protótipo (o Object.prototype), todo objeto herda ele sem você escrever uma linha sequer

Ou seja: o in diz que existe, porque existe sim, lá em cima na cadeia

E o hasOwnProperty diz que não, porque não é uma chave que você colocou no objeto

Regra de bolso: se a pergunta é "fui eu que defini essa chave?", vai de hasOwnProperty

Se tanto faz ser herdada ou não, o in resolve numa linha 🙂

Cuidado com a checagem por undefined:

Uma abordagem que aparece muito por aí é essa:

if(obj.name !== undefined) {
console.log("Existe!");
}

Funciona na maioria dos casos… mas tem uma armadilha

Se a propriedade existir e o valor dela for undefined, o teste jura que ela não existe:

var obj = {
name: undefined
};

console.log(obj.name !== undefined); // false
console.log('name' in obj); // true

A chave name está ali, você mesmo declarou ela

O que o !== undefined checa é o VALOR, não a existência da chave

Por isso, quando a pergunta é "essa propriedade existe?", o in e o hasOwnProperty são a resposta certa

Tome cuidado, esse é o tipo de bug que só aparece em produção 😛

E quando o hasOwnProperty quebra?

Aqui vai um detalhe que já me ferrou uma vez: hasOwnProperty é um método herdado, então ele pode ser sobrescrito

Se o objeto tiver uma chave chamada hasOwnProperty, a chamada direta explode:

var obj = {
hasOwnProperty: "opa"
};

obj.hasOwnProperty('name'); // TypeError: obj.hasOwnProperty is not a function

Caso este erro apareça, a saída é chamar o método direto do protótipo e passar o objeto:

Object.prototype.hasOwnProperty.call(obj, 'name');

Fica mais verboso, eu sei

Mas funciona até em objeto criado com Object.create(null), que nasce sem cadeia de protótipo nenhuma e por isso não tem hasOwnProperty pra chamar

Como verificar propriedade dentro de objeto aninhado:

O in checa um nível de cada vez, e aí mora o perigo

Se você pular direto pro nível de baixo, o JavaScript reclama:

var user = {
name: "Matheus"
};

'rua' in user.endereco; // TypeError: Cannot read properties of undefined

O endereco nem existe, então não tem objeto nenhum pra procurar a chave rua

A saída é validar de fora pra dentro, na mesma condição:

var user = {
name: "Matheus",
endereco: {
rua: "Rua das Flores"
}
};

if('endereco' in user && 'rua' in user.endereco) {
console.log("Existe!");
}

O && aqui é seu amigo: se a primeira checagem der false, a segunda nem roda

Bora testar com o endereco fora do objeto pra ver a diferença?

Qual usar em cada situação:

Pra não ficar na dúvida na hora de codar:

  • in: quando serve qualquer propriedade, própria ou herdada do protótipo
  • hasOwnProperty: quando você quer só o que foi definido naquele objeto
  • Object.prototype.hasOwnProperty.call(obj, chave): quando o objeto vem de fora e você não confia no formato dele
  • !== undefined: só quando a sua pergunta de verdade é sobre o VALOR, não sobre a chave existir

Uma coisa que não muda nada nessa história: a declaração

Os exemplos aqui usam var, e você vai ver muito código por aí com const no lugar

A checagem é idêntica nos dois casos:

const obj = {
name: "Matheus",
age: 29
};

if('name' in obj) {
console.log("Existe!");
}

O que decide o resultado é a chave estar no objeto, não como você declarou a variável

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