Cómo verificar si un objeto de JavaScript está vacío: 5 formas prácticas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

«¿El objeto está vacío o no?» Analicemos el eterno dolor de cabeza del desarrollador de JavaScript

\n\n

Imagina: estás escribiendo una aplicación, recibes una respuesta de la API y necesitas saber: ¿llegaron los datos? ¿O el objeto está vacío y es momento de mostrarle al usuario un marcador de posición? ¿O estás procesando un formulario y necesitas verificar si el usuario llenó al menos un campo? Una situación dolorosamente familiar para cualquiera que escriba en JavaScript.

\n\n

¿Parecería que podría ser más simple? if (obj === {}) — ¿y listo? Lamentablemente, no. En JavaScript, dos objetos, incluso con contenido absolutamente idéntico, nunca serán iguales entre sí, a menos que sean el mismo objeto en memoria. Verificar si un objeto de JavaScript está vacío es esa tarea que ha acumulado miles de visitas en Stack Overflow y ha generado toda una industria de soluciones.

\n\n

En este artículo, analizaremos 5 formas confiables de determinar si tienes un objeto vacío. Desde las clásicas hasta las modernas, desde las rápidas hasta las seguras. ¡Allá vamos!

\n\n

¿Qué significa «objeto vacío» en JavaScript?

\n\n

Antes de lanzarnos al código, acordemos los términos. Un objeto vacío en JavaScript es un objeto que no tiene propiedades enumerables propias. Es decir, {} está vacío. Pero { name: "Alice" } ya no lo está.

\n\n

Un detalle importante: cualquier objeto tiene un prototipo (Object.prototype), y por lo tanto, tiene propiedades heredadas (por ejemplo, toString, hasOwnProperty). A nosotros no nos interesan. Solo verificamos lo que hemos agregado nosotros mismos.

\n\n

Otro escollo es null. Si una variable es igual a null o undefined, ni siquiera podemos llamar a sus métodos. Por lo tanto, lo primero es siempre verificar que el objeto exista.

\n\n

Forma 1: Object.keys() — el estándar de oro

\n\n

La forma más popular y recomendada en JavaScript moderno. El método Object.keys() devuelve un array de las propiedades enumerables propias del objeto. Si el array está vacío, el objeto está vacío.

\n\n
function isEmpty(obj) {\n    return Object.keys(obj).length === 0;\n}\n\n// Ejemplos de uso\nconsole.log(isEmpty({}));           // true\nconsole.log(isEmpty({a: 1}));       // false\nconsole.log(isEmpty({name: 'John', age: 30})); // false
\n\n

¿Por qué funciona esto? Object.keys() ignora las propiedades heredadas y devuelve solo lo que pertenece al objeto mismo. Verificar si un objeto está vacío con Object.keys() es código limpio, legible y rápido.

\n\n

Importante: Este método no verifica si el valor pasado es un objeto. Si se pasa una cadena o un número, devolverá un array vacío, y erróneamente pensaremos que el objeto está vacío. Por lo tanto, para mayor seguridad, agregamos una verificación de tipo:

\n\n
function isEmptySafe(obj) {\n    return obj && typeof obj === 'object' && Object.keys(obj).length === 0;\n}\n\nconsole.log(isEmptySafe('hello')); // false (la cadena no es un objeto)\nconsole.log(isEmptySafe(null));    // false\nconsole.log(isEmptySafe({}));      // true
\n\n

Forma 2: JSON.stringify() — inesperada pero funcional

\n\n

A veces los programadores llaman en broma a este método «muleta», pero funciona. La idea es simple: serializar el objeto a una cadena JSON y compararla con '{}'.

\n\n
function isEmptyJSON(obj) {\n    return JSON.stringify(obj) === '{}';\n}\n\nconsole.log(isEmptyJSON({}));           // true\nconsole.log(isEmptyJSON({key: 'val'})); // false
\n\n

¿Por qué este método no es ideal? En primer lugar, JSON.stringify() ignora funciones, undefined y símbolos. Si un objeto tiene una propiedad con valor undefined, simplemente desaparecerá al serializar, y el objeto se considerará vacío, aunque en realidad tenga una clave.

\n\n
const obj = { a: undefined };\nconsole.log(isEmptyJSON(obj)); // true — ¡pero debería ser false!
\n\n

En segun

Blogs

Book Recommendations