Sobes.tech
Junior

Jak zjistit, že je objekt prázdný?

sobes.tech AI

Odpověď od AI

Objekt se považuje za "prázdný", pokud nem má žádné vlastní enumerovatelné vlastnosti.

Způsoby kontroly:

  • Object.keys(): Vrací pole řetězců představujících názvy vlastních enumerovatelných vlastností objektu. Pokud je pole prázdné, je objekt prázdný.

    const myObject = {};
    if (Object.keys(myObject).length === 0) {
      // Objekt je prázdný
    }
    
  • for...in a hasOwnProperty(): Iteruje přes enumerovatelné vlastnosti objektu (včetně zděděných) a kontroluje, zda je vlastnost vlastní.

    const myObject = {};
    let isEmpty = true;
    for (const key in myObject) {
      if (Object.prototype.hasOwnProperty.call(myObject, key)) {
        isEmpty = false;
        break;
      }
    }
    if (isEmpty) {
      // Objekt je prázdný
    }
    

    Object.prototype.hasOwnProperty.call() se používá pro bezpečnější kontrolu, protože hasOwnProperty může být přepsáno na objektu.

  • JSON.stringify(): Převádí objekt na řetězec JSON. Prázdný objekt {} se převede na řetězec "{}"

    const myObject = {};
    if (JSON.stringify(myObject) === '{}') {
      // Objekt je prázdný
    }
    

    Tento způsob je vhodný pro jednoduché objekty bez funkcí a cyklických odkazů.

  • Object.getOwnPropertyNames(): Vrací pole všech vlastních (nezděděných), enumerovatelných a neenumerovatelných vlastností (včetně symbolů).

    const myObject = {};
    if (Object.getOwnPropertyNames(myObject).length === 0) {
      // Objekt je prázdný
    }
    
  • Object.getOwnPropertySymbols(): Vrací pole všech vlastních symbolických vlastností objektu. Pokud je objekt prázdný (a nemá symbolické vlastnosti), bude toto pole prázdné.

    const myObject = {};
    if (Object.getOwnPropertySymbols(myObject).length === 0 && Object.getOwnPropertyNames(myObject).length === 0) {
        // Objekt je prázdný, včetně symbolických vlastností
    }
    

Volba metody závisí na kontextu a požadavcích na výkon. Object.keys() a JSON.stringify() jsou obvykle nejrychlejší a nejvýstižnější pro jednoduché případy. Pro zohlednění všech typů vlastností a zděděných vlastností mohou být potřeba další kontroly.