JavaScript: Jak sprawdzić czy obiekt jest pusty?

Opublikowano: 24.03.2022 - tagi: JavaScript Obiekt

Można to sprawdzić na kilka sposobów:

Sposób 1: Object.keys

const isObjectEmpty = (object) => {
  return !Object.keys(object).length;
}

const emptyObject = {};
console.log('isObjectEmpty: ', isObjectEmpty(emptyObject)); // isObjectEmpty: true

Metoda keys zwraca klucze obiektu, w postaci tablicy. Jeśli tablica nie ma elementów, oznacza to, że obiekt jest pusty

Sposób 2: Object.entries

const isObjectEmpty = (object) => {
  return !Object.entries(object).length;
}

const emptyObject = {};
console.log('isObjectEmpty: ', isObjectEmpty(emptyObject)); // isObjectEmpty: true

Praktycznie to samo, co poprzednio, ale wykorzystujemy tutaj metodę entries, która zwraca tablicę, której wartości są przechowywane w postaci: [klucz, wartość].

Sposób 3: Object.getOwnPropertyNames

Ostatni sposób różni się trochę od dwóch poprzednich. Metody keys i entries sprawdzają policzalne właściwości obiektu. Metoda getOwnPropertyNames zwraca zarówno policzalne i niepoliczalne właściwości obiektu.

Przykład:

const object = {
  price: 100
};
object.title = 'Foo';
Object.defineProperty(object, 'color', {
  value: 'red',
  enumerable: false
});

console.log(Object.keys(object)); // ['price', 'title']
console.log(Object.getOwnPropertyNames(object)); // ['price', 'title', 'color']

Za pomocą metody defineProperty tworzymy właściwość niepoliczalną o nazwie color. Jak widać jest różnica między keys (ale też entries) a getOwnPropertyNames.

Poniżej przykład z użyciem: getOwnPropertyNames:

const isObjectEmpty = (object) => {
  return !Object.getOwnPropertyNames(object).length;
}

const emptyObject = {};
console.log('isObjectEmpty: ', isObjectEmpty(emptyObject)); // isObjectEmpty: true

const object = {
  price: 100
};
object.title = 'Foo';
Object.defineProperty(object, 'color', {
  value: 'red',
  enumerable: false
});
console.log('isObjectEmpty: ', isObjectEmpty(object)); // isObjectEmpty: false

Przy drugiej próbie nasza funkcja zwróci false, ponieważ wykryje niepoliczalną właściwość color.