Pre

O que significa um objeto vazio em JavaScript?

Quando falamos em “javascript check if object is empty”, estamos nos referindo a uma situação comum nas aplicações web: precisamos saber se um objeto JavaScript não possui propriedades próprias. Em termos práticos, um objeto vazio é aquele que não guarda chaves com valores definidos. No entanto, é preciso esclarecer algumas nuances para não confundir objetos vazios com estruturas que parecem vazias, mas que contêm propriedades herdadas, símbolos ou valores especiais como NaN. Este artigo explora diferentes estratégias, cenários de uso e melhores práticas para realizar a verificação de objetos vazios de forma robusta e performática.

Antes de mergulhar nos métodos, vale entender que nem toda estrutura que parece vazia é tecnicamente um objeto sem conteúdo. Objetos podem ter propriedades não enumeráveis, propriedades herdadas através de protótipos, ou ainda podem ser instâncias de classes que implementam getters sem armazenar dados diretamente. Por isso, a prática correta de checagem depende do que você considera como “vazio” no seu contexto de aplicação.

Por que a verificação de objeto vazio é importante no desenvolvimento com JavaScript

Ter uma checagem confiável de objetos vazios auxilia em vários cenários: validação de formulários, configuração de opções, inicialização de recursos, pipelines de dados e rotas de processamento assíncrono. Uma verificação correta evita erros como tentativas de ler propriedades de um objeto inexistente, ou a execução de lógica desnecessária quando não há dados a processar. Além disso, entender como checar se um objeto está vazio ajuda a manter o código mais legível, mais previsível e menos propenso a falhas em ambientes de produção.

Principais técnicas para javascript check if object is empty

1) Usando Object.keys(obj).length

Esta é provavelmente a abordagem mais comum e direta. Object.keys retorna um array com as chaves enumeráveis próprias do objeto. Se o array estiver com comprimento zero, o objeto não possui propriedades próprias enumeráveis. É importante notar que isso não considera propriedades herdadas pelo protótipo nem símbolos.

// Verifica se o objeto não possui propriedades próprias enumeráveis
function isEmpty(obj) {
  return obj != null && Object.keys(obj).length === 0;
}

// Uso
console.log(isEmpty({})); // true
console.log(isEmpty({ a: 1 })); // false
  

2) Usando Object.getOwnPropertyNames(obj).length

Se você precisa considerar também propriedades não enumeráveis, pode utilizar Object.getOwnPropertyNames. Esse método retorna todas as propriedades próprias, enumeráveis ou não.

// Leva em conta propriedades próprias, enumeráveis e não enumeráveis
function isEmptyOwnProps(obj) {
  if (obj == null) return true;
  return Object.getOwnPropertyNames(obj).length === 0;
}
  

3) Usando Object.values(obj).length

Outra variante comum é usar Object.values, que retorna as propriedades próprias com seus valores (inclui valores falsy como 0, “”, false). Se o comprimento for 0, não há propriedades próprias com valores atribuídos.

function isEmptyValues(obj) {
  return obj != null && Object.values(obj).length === 0;
}
  

4) Usando for…in com hasOwnProperty

Se você precisa levar em conta também propriedades herdadas, pode iterar com for…in e verificar hasOwnProperty para confirmar se há propriedades próprias. Um objeto totalmente imóvel ou com apenas propriedades herdadas pode parecer vazio em alguns cenários, por isso a checagem precisa ser clara.

function isEmptyForIn(obj) {
  for (let key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      return false;
    }
  }
  return true;
}
  

5) Usando JSON.stringify

Transformar o objeto em uma string JSON pode fornecer uma forma simples de checagem, especialmente quando você sabe que o objeto não terá métodos. Se a string resultante for “{}” é provável que o objeto seja vazio, mas lembre-se de que essa abordagem pode ser menos performática em cenários críticos de desempenho.

function isEmptyJson(obj) {
  return JSON.stringify(obj) === '{}';
}
  

6) Considerando Map, Set e contêineres semelhantes

Se você está trabalhando com tipos de coleção como Map, Set, WeakMap ou WeakSet, o conceito de “vazio” é diferente. Por exemplo, um Map pode ter size zero, o que significa que não há pares chave-valor. Em tais casos, use obj.size === 0 para Map e Set. O objetivo é adaptar a verificação ao tipo de estrutura que você está usando.

// Map e Set
function isEmptyMapOrSet(container) {
  if (container == null) return true;
  return container.size === 0;
}
  

Exemplos práticos de javascript check if object is empty em cenários reais

Exemplo 1: validação simples de objeto de opções

Considere um objeto de configurações fornecido pelo usuário. Antes de aplicar as opções, você pode checar se ele está vazio e, em caso afirmativo, usar defaults.

function aplicarConfig(config) {
  const isConfigVazio = Object.keys(config || {}).length === 0;
  if (isConfigVazio) {
    return { tema: 'claro', exibirSugestoes: true };
  }
  // Mesclar configurações fornecidas
  return { tema: 'claro', exibirSugestoes: false, ...config };
}
  

Exemplo 2: verificação robusta em dados recebidos de uma API

Ao trabalhar com dados de API, é comum receber um objeto que pode ou não ter propriedades esperadas. Abaixo, um approach que leva em conta null/undefined e propriedades próprias.

function temDadosValidos(obj) {
  if (obj == null) return false;
  return Object.keys(obj).length > 0;
}
  

Exemplo 3: validar se um objeto tem apenas propriedades herdadas

Às vezes, objetos podem ter apenas propriedades herdadas sem nenhuma propriedade própria, o que pode enganar algumas checagens simples. A verificação com hasOwnProperty oferece mais robustez.

function temPropriedadesProprias(obj) {
  for (let key in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, key)) {
      return true;
    }
  }
  return false;
}
  

Boas práticas, nuances e armadilhas comuns ao javascript check if object is empty

A prática de verificar se um objeto está vazio envolve considerar alguns cenários específicos para evitar falsos positivos ou negativos.

Evitar falsos positivos com protótipos

Um objeto pode herdar propriedades do protótipo, o que pode confundir verificações que só olham para chaves próprias. Sempre prefira métodos que verificam propriedades próprias, como Object.keys(obj).length ou Object.getOwnPropertyNames(obj).length, para evitar essa armadilha.

Tratando objetos nulos ou indefinidos

Antes de qualquer verificação, é essencial assegurar que o objeto não é null ou undefined. Caso contrário, você pode introduzir exceções. Um padrão seguro é valiar obj != null antes de realizar a checagem de propriedades.

Considerando arrays e objetos distintos

Arrays são objetos em JavaScript, mas quando você verifica um array vazio com Object.keys ou Object.values, o resultado pode não refletir exatamente a sua intenção. Se a sua lógica precisa distinguir entre um objeto vazio e um array vazio, trate os tipos explicitamente com typeof e Array.isArray.

Complexidade de tempo

Em geral, as operações envolvendo chaves (Object.keys, Object.values, Object.getOwnPropertyNames) têm complexidade linear em relação ao número de propriedades. Em aplicações com objetos grandes ou com ciclos de dados repetidos, escolha uma abordagem com menor sobrecarga, ou caching quando possível.

Considerações sobre desempenho: quando escolher cada abordagem

A decisão entre diferentes métodos de verificação depende do seu contexto de uso. Em cenários simples, Object.keys(obj).length é rápido, legível e amplamente suportado. Quando há a necessidade de considerar propriedades não enumeráveis, Object.getOwnPropertyNames é mais completo, porém ligeiramente mais custoso. Se você trabalha com estruturas de dados como Map ou Set, use a propriedade size para checar se estão vazios. A escolha adequada depende de quão preciso você precisa ser e do tamanho típico dos objetos que sua aplicação manipula.

JavaScript Check If Object Is Empty em TypeScript

Quando usamos TypeScript, podemos encaixar as checagens de objetos vazios dentro de tipos. Embora o runtime permaneça JavaScript, a tipagem ajuda a evitar erros durante o desenvolvimento. A mesma lógica funciona, apenas com anotações de tipo que ajudam na clareza do código e na verificação estática.

// Exemplo em TypeScript
function isEmptyObject(obj: Record | null | undefined): boolean {
  if (obj == null) return true;
  return Object.keys(obj).length === 0;
}
  

Perguntas frequentes sobre javascript check if object is empty

O que é considerado um objeto vazio?

Um objeto é considerado vazio quando não possui propriedades próprias enumeráveis. Dependendo da abordagem, propriedades não enumeráveis, símbolos ou propriedades herdadas podem influenciar a verificação. Por isso, escolha o método de checagem de acordo com o que você define como “vazio” no seu contexto.

É seguro usar JSON.stringify para checar objetos vazios?

JSON.stringify pode funcionar para checagem de objetos simples, mas pode introduzir custos de desempenho para objetos grandes. Além disso, objetos com propriedades não enumeráveis podem não se comportar da forma esperada. Use como solução rápida apenas quando você tem certeza do formato do objeto.

Como lidar com objetos que contêm apenas propriedades herdadas?

Nesse caso, é crucial usar checagens que considerem propriedades próprias, como Object.keys(obj) ou Object.prototype.hasOwnProperty.call(obj, key) dentro de um laço for…in. Isso evita falsos positivos quando o objeto não possui propriedades próprias, mas sim herdadas.

Posso usar essas técnicas com mapas e conjuntos?

Para Map e Set, utilize a propriedade size. Um Map ou Set vazio possui tamanho 0. Não confunda com objetos puros; a semântica de “vazio” é diferente para essas estruturas.

Resumo prático: como escolher a melhor forma de javascript check if object is empty

Para a maioria dos casos, começar com Object.keys(obj).length === 0 é o caminho mais simples, legível e confiável para checar se um objeto é vazio. Se você precisa considerar propriedades não enumeráveis, use Object.getOwnPropertyNames(obj).length. Em cenários com mapas ou conjuntos, verifique obj.size. Em situações mais complexas, combine verificações com hasOwnProperty para ter certeza de que a checagem olha apenas propriedades próprias. Em qualquer caso, trate obj como possivelmente nulo ou indefinido antes de qualquer verificação.

Conclusão

Dominar a verificação de objetos vazios em JavaScript, ou seja, o javascript check if object is empty, é uma skill essencial para validações robustas, pipelines de dados confiáveis e interfaces responsivas. Ao entender as diferentes técnicas, nuances e trade-offs de cada abordagem, você consegue escrever código mais claro, performático e seguro. Lembre-se de adaptar a estratégia ao tipo de objeto com o qual você está lidando — objeto puro, array, Map, Set — e ao que você considera como “vazio” no seu domínio de aplicação. Com as práticas certas, a checagem de objetos vazios se torna uma ferramenta simples, repetível e poderosa no seu kit de desenvolvimento.