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!

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
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 48min
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

VPS Hostinger para seu sistema
10% OFF extraVPS com SSD NVMe e backups semanais. O cupom MATHEUSHORADECODAR é aplicado automaticamente pelo link.
Ver planos com 10% OFF →"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

Crie sistemas com IA para vender
Prompts, modelos e checklists para criar e publicar seu sistema com IA e preparar a oferta para o primeiro cliente.
Quero o e-book gratuito Receba o livro e os bônus no seu e-mail.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
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 30min
Blog | Mais populares
As diferenças de var, let e const

Como redirecionar para outra página com JavaScript
Exercícios de lógica de programação JavaScript com gabarito
Pratique lógica com JavaScript resolvendo um exercício antes de abrir o gabarito. Execute o código, teste uma entrada comum e um caso de borda, como […]
