2012-05-07 15 views
5

¿Hay una forma mejor de comprobar si un objeto está vacío? estoy usando esto:Objeto JS vacío

function isObjEmpty(obj) 
{ 
    for (var p in obj) return false; 
    return true; 
} 
+1

¿Cuáles considera "vacío"? – Niko

+0

Por qué usar [hasOwnProperty] (https://developer.mozilla.org/es/JavaScript/Reference/Global_Objects/Object/HasOwnProperty) => ref: http://jsfiddle.net/v3Lyn/ – Yoshi

+0

Esta pregunta no tiene nada que ver con hacer con JSON. –

Respuesta

10

Si usted está buscando una sola línea, considere Object.keys:

var isEmpty = !Object.keys(obj).length; 

Su método actual es peligroso, ya que siempre devolverá falso cuando tiene Object.prototype sido extendida: http://jsfiddle.net/Neppc/

+0

+1 Muy buena solución. – Sampson

+0

¡agradable agradable! Gracias. –

+0

sí. tienes razón. Esperando 10 minutos para marcar su respuesta como correcta. no puedo aún gracias robar –

2

Otra opción está integrado en jQuery: jQuery.isEmptyObject(obj)

Editar: Curiosamente, esa implementación es la misma que su código en la pregunta.

0

¡Realmente esta es una muy buena manera de verificar si un objeto está vacío! Y es 10 veces más rápido para los objetos exmpty que el uso de Object.keys() como se sugirió anteriormente :)

Sometido a pruebas en Nodo, Cromo, Firefox e IE 9, se hace evidente que para la mayoría de los casos de uso:

  • (para ... en ...) es la opción más rápida de usar!
  • Object.keys (obj) .length es 10 veces más lenta para los objetos vacíos
  • JSON.stringify (obj) .length es siempre el más lento (no sorprende)
  • Object.getOwnPropertyNames (obj) .length lleva más tiempo que Object.keys (obj) .length puede ser mucho más largo en algunos sistemas.

rendimiento de la línea de fondo sabia, utilice:

function isEmpty(obj) { 
    for (var x in obj) { return false; } 
    return true; 
} 

o

function isEmpty(obj) { 
    for (var x in obj) { if (obj.hasOwnProperty(x)) return false; } 
    return true; 
} 

Ver resultados de las pruebas detalladas y el código de prueba en Is object empty?

Cuestiones relacionadas