2010-02-26 1 views
8

Probablemente un duplicado de this question.trivia Javascript: verifique la igualdad contra el objeto vacío

Silly pregunta de javascript: Quiero comprobar si un objeto es el objeto emtpy.

me llaman objeto vacío el objeto que resulta de utilizar el objeto vacío literal, como en:

var o = {}; 

Como era de esperar, ni == ni === trabajo, ya que las dos afirmaciones siguientes

alert({}=={}); 
alert({}==={}); 

dar falso.

ejemplos de expresiones que no do evalúan al objeto vacío:

  • 0
  • ""
  • {a:"b"}
  • []
  • new function(){}

Entonces, ¿cuál es la forma más corta de evaluar el objeto vacío?

+0

Una cuestión interesante. Un rápido toque en el motor de búsqueda de mi elección ha demostrado que no es realmente tan fácil. Este hilo podría ayudar un poco si: http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json –

Respuesta

14
function isEmpty(o){ 
    for(var i in o){ 
     if(o.hasOwnProperty(i)){ 
      return false; 
     } 
    } 
    return true; 
} 
+1

Me ganaste por un par de segundos .... :-) –

+5

http://api.jquery.com/jQuery.isEmptyObject/ – Zac

0

En realidad no hay un camino corto para determinar si un objeto está vacío tiene Javascript crea un objeto y añade internamente constructor y prototype propiedades de los objetos de forma automática.

puede crear su propio método isEmpty() así:

var obj={} 
Object.prototype.isEmpty = function() { 
    for (var prop in this) { 
     if (this.hasOwnProperty(prop)) return false; 
    } 
    return true; 
}; 
alert(obj.isEmpty()); 

lo tanto, si cualquier objeto tiene ninguna propiedad, entonces el objeto no está vacío otra vuelta verdad.

1

Se puede utilizar esta sintaxis

if (a.toSource() === "({})") 

pero esto no funciona en IE. Como una alternativa al método de codificar "toSource()" para JSON de las bibliotecas ajax se puede utilizar:

Por ejemplo,

var o = {}; 
alert($.toJSON(o)=='{}'); // true 

var o = {a:1}; 
alert($.toJSON(o)=='{}'); // false 

jquery + jquery.json

0
javascript: 
    cs = 'MTobj={ }; JSON.stringify(MTobj)=="{}"'; 
    alert(cs+' is '+eval(cs)); 
    cs = 'MTnot={a:2}; JSON.stringify(MTnot)=="{}"'; 
    alert(cs+' is '+eval(cs)); 

dice

MTobj={ }; JSON.stringify(MTobj)=="{}" is true 
MTnot={a:2}; JSON.stringify(MTnot)=="{}" is false 

Ca veat! ¡Tener cuidado! ¡puede haber falsos positivos!

javascript: 
    cs = 'MTobj={ f:function(){} }; JSON.stringify(MTobj)=="{}"'; 
    alert(cs+' is '+eval(cs)); 
    alert("The answer is wrong!!\n\n"+ 
        (cs="JSON.stringify({ f:function(){} })")+ 
          "\n\n returns\n\n"+eval(cs)); 
9

También puede utilizar Object.keys() para probar si un objeto es "vacío":

if (Object.keys(obj).length === 0) { 
    // "empty" object 
} else { 
    // not empty 
} 
+0

esa es la respuesta correcta. Para quién necesita tener esto funcionando en IE8, consulte la biblioteca es5-shim. – Ventura

+0

Esto es 10 veces más lento que la opción (para ... en) - ver http://stackoverflow.com/questions/4994201/is-object-empty?lq=1 – davidhadas

Cuestiones relacionadas