Sobes.tech
Junior

Jak sprawdzić, czy obiekt jest pusty?

sobes.tech AI

Odpowiedź od AI

Obiekt jest uważany za "pusty", jeśli nie ma własnych właściwości enumerowalnych.

Sposoby sprawdzania:

  • Object.keys(): Zwraca tablicę łańcuchów reprezentujących nazwy własnych właściwości enumerowalnych obiektu. Jeśli tablica jest pusta, obiekt jest pusty.

    const myObject = {};
    if (Object.keys(myObject).length === 0) {
      // Obiekt jest pusty
    }
    
  • for...in i hasOwnProperty(): Iteruje po enumerowalnych właściwościach obiektu (w tym odziedziczonych) i sprawdza, czy właściwość jest własna.

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

    Object.prototype.hasOwnProperty.call() jest używane dla bezpieczniejszej weryfikacji, ponieważ hasOwnProperty mogło zostać nadpisane na obiekcie.

  • JSON.stringify(): Konwertuje obiekt na łańcuch JSON. Pusty obiekt {} jest konwertowany na łańcuch "{}"

    const myObject = {};
    if (JSON.stringify(myObject) === '{}') {
      // Obiekt jest pusty
    }
    

    Metoda ta jest odpowiednia dla prostych obiektów bez funkcji i cyklicznych odwołań.

  • Object.getOwnPropertyNames(): Zwraca tablicę wszystkich własnych (nie odziedziczonych), enumerowalnych i nieenumerowalnych właściwości (w tym symboli).

    const myObject = {};
    if (Object.getOwnPropertyNames(myObject).length === 0) {
      // Obiekt jest pusty
    }
    
  • Object.getOwnPropertySymbols(): Zwraca tablicę wszystkich własnych symbolicznych właściwości obiektu. Jeśli obiekt jest pusty (i nie ma symbolicznych właściwości), ta tablica będzie pusta.

    const myObject = {};
    if (Object.getOwnPropertySymbols(myObject).length === 0 && Object.getOwnPropertyNames(myObject).length === 0) {
        // Obiekt jest pusty, w tym symboliczne właściwości
    }
    

Wybór metody zależy od kontekstu i wymagań dotyczących wydajności. Object.keys() i JSON.stringify() są zazwyczaj najszybsze i najbardziej zwięzłe dla prostych przypadków. Aby uwzględnić wszystkie typy właściwości i odziedziczone właściwości, mogą być potrzebne dodatkowe sprawdzenia.