Sobes.tech
Junior

Como saber se um objeto está vazio?

sobes.tech IA

Resposta da IA

Um objeto é considerado "vazio" se não tiver propriedades enumeráveis próprias.

Formas de verificar:

  • Object.keys(): Retorna um array de strings representando os nomes das propriedades enumeráveis próprias do objeto. Se o array estiver vazio, o objeto está vazio.

    const myObject = {};
    if (Object.keys(myObject).length === 0) {
      // Objeto vazio
    }
    
  • for...in e hasOwnProperty(): Itera sobre as propriedades enumeráveis do objeto (incluindo as herdadas) e verifica se a propriedade é própria.

    const myObject = {};
    let isEmpty = true;
    for (const key in myObject) {
      if (Object.prototype.hasOwnProperty.call(myObject, key)) {
        isEmpty = false;
        break;
      }
    }
    if (isEmpty) {
      // Objeto vazio
    }
    

    Object.prototype.hasOwnProperty.call() é usado para uma verificação mais segura, pois hasOwnProperty pode ter sido sobrescrito no objeto.

  • JSON.stringify(): Converte o objeto em uma string JSON. Um objeto vazio {} é convertido na string "{}"

    const myObject = {};
    if (JSON.stringify(myObject) === '{}') {
      // Objeto vazio
    }
    

    Este método é adequado para objetos simples sem funções e ligações circulares.

  • Object.getOwnPropertyNames(): Retorna um array de todas as propriedades próprias (não herdadas), enumeráveis e não enumeráveis (incluindo símbolos).

    const myObject = {};
    if (Object.getOwnPropertyNames(myObject).length === 0) {
      // Objeto vazio
    }
    
  • Object.getOwnPropertySymbols(): Retorna um array de todas as propriedades simbólicas próprias do objeto. Se o objeto estiver vazio (e não tiver propriedades simbólicas), esse array será vazio.

    const myObject = {};
    if (Object.getOwnPropertySymbols(myObject).length === 0 && Object.getOwnPropertyNames(myObject).length === 0) {
        // Objeto vazio, incluindo propriedades simbólicas
    }
    

A escolha do método depende do contexto e dos requisitos de desempenho. Object.keys() e JSON.stringify() geralmente são os mais rápidos e concisos para casos simples. Para considerar todos os tipos de propriedades e herdadas, podem ser necessárias verificações adicionais.