Original article: How to Check if an Object is Empty in JavaScript – JS Java isEmpty Equivalent

Un objeto es uno de los tipos de dato más usados en programación. Un objeto es una colección de datos relacionados, almacenados como pares de clave-valor. Por ejemplo:

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14,
}

Cuando trabajes con objetos, puede ser que necesites verificar si un objeto está vacío antes de ejecutar una función.

En JavaScript, hay distintas maneras de verificar si un objeto está vacío. En este artículo, aprenderás distintas maneras para hacerlo, las opciones que se pueden unir y por qué

Nota: Un objeto es considerado vacío cuando este no tiene par de clave-valor.

En caso de que tengas prisa, aquí tienes un ejemplo básico:

const myEmptyObj = {};

// Works best with new browsers
Object.keys(myEmptyObj).length === 0 && myEmptyObj.constructor === Object

// Works with all browsers
_.isEmpty(myEmptyObj)

Ambos métodos devolverán true. Ahora comprendamos estas y más opciones que se pueden usar para verificar si un objeto está vacío en JavaScript.

Como verificar si un objeto está vacío con Object.keys()

El método Object.keys() es un método de objeto estático introducido en ECMAScript6 (ES6) y es compatible con todos los navegadores modernos. Este método devuelve un arreglo con las claves de un objeto. Por ejemplo:

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

console.log(Object.keys(userDetails)); // ["name","username","age"]

Con esto puedes aplicar la propiedad .length. Si devulve cero (0) el objeto está vacío.

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

let myEmptyObj = {};

console.log(Object.keys(userDetails).length); // 3
console.log(Object.keys(myEmptyObj).length); // 0

Puedes usar este método para verificar si un objeto está vacío con una sentencia if o crear una función que lo compruebe.

const isObjectEmpty = (objectName) => {
  return Object.keys(objectName).length === 0
}

Esto devolverá true o false. Si el objeto está vacío, devolverá true caso contrario devolverá false.

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

let myEmptyObj = {};

const isObjectEmpty = (objectName) => {
  return Object.keys(objectName).length === 0
}

console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true

Nota: Verificar solamente la longitud no es la mejor opción cuando se verifica si un objeto está vacío o para cualquier tipo de dato. Siempre es mejor confirmar si el tipo de dato es correcto.

Para hacerlo, puedes usar el verificador de constructor:

const isObjectEmpty = (objectName) => {
  return Object.keys(objectName).length === 0 && objectName.constructor === Object;
}

De esta manera, es probable que obtengas un control más completo.

Hasta ahora todo ha funcionado bien. Pero también es posible que desees evitar que se genere un TypeError cuando una variable es undefined o se pasa un valor null en vez de {}. Para arreglarlo, podemos añadir una verificación adicional:

const isObjectEmpty = (objectName) => {
  return (
    objectName &&
    Object.keys(objectName).length === 0 &&
    objectName.constructor === Object
  );
};

En el código anterior se añade una verificación. Esto significa que devolverá null o undefined si no es un objeto vacío, como se muestra en el siguiente ejemplo:

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

let myEmptyObj = {};
let nullObj = null;
let undefinedObj;

const isObjectEmpty = (objectName) => {
  return (
    objectName &&
    Object.keys(objectName).length === 0 &&
    objectName.constructor === Object
  );
};

console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true
console.log(isObjectEmpty(undefinedObj)); // undefined
console.log(isObjectEmpty(nullObj)); // null

Nota: Esto aplica a otros métodos estáticos de objeto, lo que significa que puedes usar Object.entries() o Object.values() en vez de Object.keys().

Cómo verificar si un objeto está vacío con un bucle for...in

Otro método que puedes usar en ES6 es el bucle for...in. Puedes usar este loop junto al método hasOwnProperty().

const isObjectEmpty = (objectName) => {
  for (let prop in objectName) {
    if (objectName.hasOwnProperty(prop)) {
      return false;
    }
  }
  return true;
};

El método anterior recorrerá cada propiedad del objeto. Si encuentra una sola iteración, el objeto no está vacío. Además, hasOwnProperty() devolverá un valor booleano que indica si el objeto tiene la propiedad especificada como propiedad.

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

let myEmptyObj = {};

const isObjectEmpty = (objectName) => {
  for (let prop in objectName) {
    if (objectName.hasOwnProperty(prop)) {
      return false;
    }
  }
  return true;
};

console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true

Cómo verificar si un objeto está vacío con JSON.stringify()

También puedes usar el método JSON.stringify(), el cual es usado para convertir un valor JavaScript a una cadena JSON. Esto significa que convertirá los valores de su objeto a una cadena del objeto. Por ejemplo:

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

console.log(JSON.stringify(userDetails)); 

Output:
"{'name':'John Doe','username':'jonnydoe','age':14}"

Esto significa que cuando es un objeto vacío, este devolverá "{}". Puedes haces uso de esto para verificar si hay un objeto vacío.

const isObjectEmpty = (objectName) => {
  return JSON.stringify(objectName) === "{}";
};

Este devolverá true si el objeto está vacío, de otra manera false:

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

let myEmptyObj = {};

const isObjectEmpty = (objectName) => {
  return JSON.stringify(objectName) === "{}";
};

console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true

Cómo verificar si un objeto está vacío con Lodash

Finalmente, algunos de los métodos explicados pueden funcionar para versiones antiguas de navegador, mientras que en otras puede que no funcionen. Si te preocupa tener una solución que funcione tanto para las versiones antiguas de navegador como para las modernas, puedes usar Lodash.

Lodash es una biblioteca moderna de utilidades de JavaScript que puede realizar muchas funcionalidades de JavaScript con una sintaxis muy básica.

Por ejemplo, si quieres verificar si un objeto está vacío, solo necesitas usar el metodo "isEmpty".

_.isEmpty(objectName);

Instalar Lodash en tu proyecto es bastante fácil. Todo lo que tienes que hacer es usar este comando:

$ npm install lodash

Puedes inicializar el método de guion bajo y usarlo:

const _ = require('lodash');

let userDetails = {
  name: "John Doe",
  username: "jonnydoe",
  age: 14
};

let myEmptyObj = {};

const isObjectEmpty = (objectName) => {
  return _.isEmpty(objectName);
};

console.log(isObjectEmpty(userDetails)); // false
console.log(isObjectEmpty(myEmptyObj)); // true

¡Eso es todo! ?

Disfruté explorando las diversas maneras en que se puede verificar si un objeto está vacío. Siéntete libre de usar el mejor método que se adapte a tu proyecto o tarea.

¡Diviértete programando!