Después de una solicitud AJAX, a veces mi aplicación puede devolver un objeto vacío, como:
var a = {};
¿Cómo puedo verificar si ese es el caso?
Después de una solicitud AJAX, a veces mi aplicación puede devolver un objeto vacío, como:
var a = {};
¿Cómo puedo verificar si ese es el caso?
if( Object.entries(a).length > 0){ //do }
Respuestas:
ECMA 5+ :
Sin embargo, tenga en cuenta que esto crea una matriz innecesaria (el valor de retorno de
keys
).Pre-ECMA 5:
jQuery :
lodash :
Subrayado :
Hoek
ExtJS
AngularJS (versión 1)
Ramda
fuente
Object.keys(new Date()).length === 0
; entonces esta respuesta puede ser engañosa.(new Date()).constructor === Date
o viceversa({}).constructor === Object
.Object.keys()
no verifica propiedades o símbolos no enumerables. Necesitas usarObject.getOwnPropertyNames()
y en suObject.getOwnPropertySymbols()
lugar. Además,Object.getPrototypeOf()
es la forma correcta de obtener el prototipo de un objeto.obj.constructor
Se puede forjar fácilmente. Ejemplo:function Foo() {} Foo.prototype.constructor = Object; (new Foo()).constructor === Object // true
.No hay una manera fácil de hacer esto. Tendrá que recorrer las propiedades explícitamente:
Si el soporte ECMAScript 5 está disponible, puede usar
Object.keys()
en su lugar:fuente
isEmpty()
, por lo que debería regresarfalse
si tiene una propiedadPara aquellos de ustedes que tienen el mismo problema pero usan jQuery, pueden usar jQuery.isEmptyObject .
fuente
underscore.js
...Esta es mi solución preferida:
fuente
Object.keys(new Date()).length === 0
; entonces esta respuesta puede ser engañosa.new Date()
No es un objeto.nd = new Date(); nd.constructor === Object;
resultados enfalse
.Puedes usar Underscore.js .
fuente
ver http://bencollier.net/2011/04/javascript-is-an-object-empty/
fuente
Object.getOwnPropertyNames(new Date()).length === 0
; entonces esta respuesta puede ser engañosa.¿Qué tal usar JSON.stringify? Está casi disponible en todos los navegadores modernos.
fuente
Me encontré con una situación similar. No quería usar JQuery, y quería hacerlo usando Javascript puro.
Y lo que hice fue usar la siguiente condición y funcionó para mí.
Para no igual a, use esto:
JSON.stringify(obj) !== '{}'
Mira este JSFiddle
fuente
Antigua pregunta, pero acaba de tener el problema. Incluir JQuery no es realmente una buena idea si su único propósito es verificar si el objeto no está vacío. En cambio, solo profundice en el código de JQuery , y obtendrá la respuesta:
fuente
Hay una manera simple si estás en un navegador más nuevo.
Object.keys(obj).length == 0
fuente
keys
viene la propiedad?Object.keys
es un método estándar pero los objetos no tienen una propiedad de claves. Por lo tanto, este código informará que cualquier objeto está vacío, excepto que accidentalmente tiene una propiedad nombradakey
con un valor que nuevamente como una propiedad nombradalength
que no es cero. ¡Horrible!Object.keys(new Date()).length === 0
; entonces esta respuesta puede ser engañosa.Actuación
Hoy 2020.01.17 realizo pruebas en MacOs HighSierra 10.13.6 en Chrome v79.0, Safari v13.0.4 y Firefox v72.0, para las soluciones elegidas.
Conclusiones
for-in
(A, J, L, M) son más rápidasJSON.stringify
(B, K) son lentasObject
(N) es lentaDetalles
A continuación en el fragmento se presentan 15 soluciones. Si desea ejecutar una prueba de rendimiento en su máquina, haga clic AQUÍ .
Mostrar fragmento de código
fuente
¡Usar Object.keys (obj) .length (como se sugirió anteriormente para ECMA 5+) es 10 veces más lento para objetos vacíos! mantener con la vieja escuela (para ... en) opción.
Probado en Node, Chrome, Firefox e IE 9, se hace evidente que para la mayoría de los casos de uso:
En términos de rendimiento, use:
o
Vea los resultados detallados de las pruebas y el código de prueba en ¿Está el objeto vacío?
fuente
Object.keys
es lento, pero menos código En una página pequeña, donde esto se llama ... tal vez 10 veces ... ¿Será esto aún más lento teniendo en cuenta el tiempo de análisis adicional del código adicional?Puede verificar el recuento de las teclas de objeto:
fuente
Solo una solución alternativa. ¿Puede su servidor generar alguna propiedad especial en caso de que no haya datos?
Por ejemplo:
Luego puede verificarlo fácilmente en su código de devolución de llamada AJAX.
Otra forma de verificarlo:
EDITAR : si usa cualquier biblioteca JSON (fe JSON.js), entonces puede probar la función JSON.encode () y probar el resultado con una cadena de valor vacía.
fuente
toSource()
no es estándar y no funciona en IE u Opera (y potencialmente otros navegadores no me registro)toSource
propiedad en la sección 15.2.4; según MDC, se introdujo en JS1.3 (es decir, Netscape Navigator 4.06), ¡pero NO está en ECMA-262, tercera edición!toSource()
es una forma horrible de hacer esto (como estáJSON.encode()
). Necesita construir una cadena que represente todo su objeto para verificar si está vacía. Existe la sobrecarga de convertir cosas en cadenas, pero además necesitará convertir un millón de cosas si su objeto tiene un millón de propiedades, mientras que solo mirar una le hará saber que no está vacío.He creado una función completa para determinar si el objeto está vacío.
Utiliza
Object.keys
de ECMAScript 5 (ES5) funcionalidad si es posible para lograr el mejor rendimiento (ver tabla de compatibilidad ) y retrocesos con el enfoque más compatible para los motores más antiguos (navegadores).Solución
Aquí está la esencia de este código.
Y aquí está el JSFiddle con demostración y una prueba simple.
Espero que ayude a alguien. ¡Salud!
fuente
null
objeto.Object.keys(new Date()).length === 0
; entonces esta respuesta puede ser engañosa.Estoy usando esto
P.ej:
de aquí
Actualizar
O
puede usar la implementación jQuery de isEmptyObject
fuente
El siguiente ejemplo muestra cómo probar si un objeto JavaScript está vacío, si por vacío queremos decir que no tiene propiedades propias.
El script funciona en ES6.
fuente
fuente
Object.keys
oObject.values
?fuente
Object
con un método a través de la cadena de prototipos, porque eso es enumerable y lafor in
declaración recorre las propiedades enumerables.jQuery tiene una función especial
isEmptyObject()
para este caso:Lea más en http://api.jquery.com/jQuery.isEmptyObject/
fuente
Me gustaría comprobar si tiene al menos una clave. Eso sería suficiente para decirme que no está vacío.
fuente
false
valor? El resultado seráfalse
incorrecto.Debajo del capó, todos los métodos de verificación vacíos en todas las bibliotecas usan claves de objeto para verificar la lógica. Es una forma extraña de hacer que sea comprensible, lo que puede poner en un método, descrito aquí .
Que ha evolucionado en ES5 , ahora simplemente puede verificar la longitud de las claves del objeto, utilizando el
Object.Keys
método que toma su objeto como parámetro:O si está utilizando Lodash (debe ser) entonces.
fuente
puede usar este código simple que no usó jQuery u otras bibliotecas
La clase JSON y sus funciones ( analizar y stringify ) son muy útiles, pero tiene algunos problemas con IE7 que puede solucionar con este código simple http://www.json.org/js.html .
Otra forma simple (forma más simple):
puede usar esta forma sin usar jQuery o el objeto JSON .
fuente
JSON.stringify
la solución falla si el objeto contiene propiedades que no se pueden clasificar en cadena, como funciones o "indefinido", aunque es un caso marginal.La mejor manera que encontré:
Trabaja para:
fuente
if (!obj && obj !== 0)
.Mi toma:
Simplemente, no creo que todos los navegadores se implementen
Object.keys()
actualmente.fuente
Object.keys(new Date()).length === 0
; entonces esta respuesta puede ser engañosa.Si jQuery y el navegador web no están disponibles, también hay una función isEmpty en underscore.js.
Además, no supone que el parámetro de entrada sea un objeto. Para una lista o cadena o indefinida, también dará la respuesta correcta.
fuente
¡Consideración! Cuidado con las limitaciones de JSON.
muestra
fuente
La respuesta correcta es:
Esto verifica que:
Object.prototype
.En otras palabras, el objeto es indistinguible de uno creado con
{}
.fuente
Además de la respuesta de Thevs:
es jquery + jquery.json
fuente
$.isEmptyObject()
, no desperdicie ciclos con conversiones no obvias.Sugar.JS proporciona objetos extendidos para este propósito. El código es limpio y simple:
Hacer un objeto extendido:
Comprueba su tamaño:
fuente