2010-02-26 12 views
8

Wahrscheinlich ein Duplikat von this question.Javascript Trivia: Überprüfung auf Gleichheit gegen das leere Objekt

Silly Javascript Frage: Ich möchte überprüfen, ob ein Objekt das empty Objekt ist.

Ich nenne leeres Objekt das Objekt, das das leere Objektliteral resultiert aus der Verwendung, wie in:

var o = {}; 

Wie erwartet, weder == noch === Arbeit, wie die beiden folgenden Aussagen

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

geben Sie falsch.

Beispiele für Ausdrücke, die nicht auf das leere Objekt bewerten:

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

Was ist also der kürzeste Weg, um das leere Objekt auszuwerten?

+0

eine interessante Frage. Ein kurzer Tipp in der Suchmaschine meiner Wahl hat gezeigt, dass es nicht wirklich so einfach ist! Dieser Thread könnte helfen ein wenig tho: http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json –

Antwort

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

Sie schlagen mich um ein paar Sekunden .... :-) –

+5

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

0

ist es nicht wirklich ein kurzer Weg, um zu bestimmen, ob ein Objekt leer ist Javascript ein Objekt erstellt und intern fügt constructor und prototype Eigenschaften von Objekt automatisch.

Sie können Ihre eigene isEmpty() Methode wie folgt erstellen:

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

Also, wenn jedes Objekt jede Eigenschaft hat, dann wird das Objekt sonst nicht leer ist wahr zurück.

1

können Sie diese Syntax

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

aber das funktioniert nicht in IE verwenden. Als Alternative zu der "toSource()" Methode kodieren zu JSON der Ajax-Bibliotheken können verwendet werden:

Zum Beispiel

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)); 

sagt

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

Ca Fett! In acht nehmen! es kann falsche Positive geben!

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

Sie können auch Object.keys() zu testen, ob ein Objekt "leer" ist:

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

das ist die richtige Antwort. Für diejenigen, die dies auf IE8 arbeiten müssen, überprüfen Sie die es5-shim-Bibliothek. – Ventura

+0

Dies ist 10 mal langsamer als die (für ... in) Option - siehe http://stackoverflow.com/questions/4994201/is-object-empty?lq=1 – davidhadas

Verwandte Themen