Como verificar se um objeto JavaScript está vazio: 5 maneiras práticas

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

«O objeto está vazio — ou não?» Entendendo a eterna dor de cabeça do desenvolvedor JavaScript

\n\n

Imagine: você está escrevendo um aplicativo, recebe uma resposta de uma API e precisa saber — os dados chegaram? Ou o objeto está vazio e é hora de mostrar um placeholder ao usuário? Ou você está processando um formulário e precisa verificar se o usuário preencheu pelo menos um campo? Situação dolorosamente familiar para quem escreve em JavaScript.

\n\n

Parece simples, não? if (obj === {}) — e está resolvido? Infelizmente, não. Em JavaScript, dois objetos, mesmo com conteúdo idêntico, nunca serão iguais entre si, a menos que seja o mesmo objeto na memória. Verificar se um objeto JavaScript está vazio é aquela tarefa que acumulou milhares de visualizações no Stack Overflow e gerou toda uma indústria de soluções.

\n\n

Neste artigo, vamos analisar 5 maneiras confiáveis de determinar se você tem um objeto vazio. Desde as clássicas até as modernas, das rápidas às seguras. Vamos lá!

\n\n

O que significa «objeto vazio» em JavaScript?

\n\n

Antes de mergulharmos no código, vamos alinhar os termos. Objeto vazio em JavaScript é um objeto que não possui propriedades próprias enumeráveis. Ou seja, {} é vazio. Já { name: "Alice" } não é.

\n\n

Um detalhe importante: qualquer objeto tem um protótipo (Object.prototype), e portanto, possui propriedades herdadas (como toString, hasOwnProperty). Essas não nos interessam. Verificamos apenas o que adicionamos nós mesmos.

\n\n

Outra armadilha é o null. Se a variável for null ou undefined, nem podemos chamar seus métodos. Portanto, primeiro sempre verificamos se o objeto existe.

\n\n

Método 1: Object.keys() — o padrão ouro

\n\n

A maneira mais popular e recomendada no JavaScript moderno. O método Object.keys() retorna um array das propriedades próprias enumeráveis do objeto. Se o array estiver vazio, o objeto está vazio.

\n\n
function isEmpty(obj) {\n    return Object.keys(obj).length === 0;\n}\n\n// Exemplos de uso\nconsole.log(isEmpty({}));           // true\nconsole.log(isEmpty({a: 1}));       // false\nconsole.log(isEmpty({name: 'John', age: 30})); // false
\n\n

Por que funciona? Object.keys() ignora propriedades herdadas e retorna apenas o que pertence ao próprio objeto. Verificar se um objeto está vazio com Object.keys() é um código limpo, legível e rápido.

\n\n

Importante: Este método não verifica se o valor passado é um objeto. Se você passar uma string ou número, ele retornará um array vazio, e podemos erroneamente concluir que o objeto está vazio. Portanto, para segurança, adicione uma verificação de tipo:

\n\n
function isEmptySafe(obj) {\n    return obj && typeof obj === 'object' && Object.keys(obj).length === 0;\n}\n\nconsole.log(isEmptySafe('hello')); // false (string não é objeto)\nconsole.log(isEmptySafe(null));    // false\nconsole.log(isEmptySafe({}));      // true
\n\n

Método 2: JSON.stringify() — inesperado, mas funcional

\n\n

Às vezes, programadores brincam chamando este método de «gambiarra», mas ele funciona. A ideia é simples: serializar o objeto em uma string JSON e compará-la com '{}'.

\n\n
function isEmptyJSON(obj) {\n    return JSON.stringify(obj) === '{}';\n}\n\nconsole.log(isEmptyJSON({}));           // true\nconsole.log(isEmptyJSON({key: 'val'})); // false
\n\n

Por que este método não é ideal? Primeiro, JSON.stringify() ignora funções, undefined e símbolos. Se um objeto tiver uma propriedade com valor undefined, ela simplesmente desaparecerá na serialização, e o objeto será considerado vazio, mesmo tendo uma chave.

\n\n
const obj = { a: undefined };\nconsole.log(isEmptyJSON(obj)); // true — mas deveria ser false!
\n\n

Em segun

Blogs

Book Recommendations