2017-06-06 3 views
-1

Ich arbeite in AngularJS und versuche, Daten an mein Backend zu senden.Unterschied zwischen [Objekt, Objekt] und Array (2)

Ich bemerkte, dass, wenn die Variable in meinem Dienst hat diese Struktur test = [Object, Object] es in ein List<String> in meinem ASP.NET-Backend übergeben wird, aber ich habe Probleme test = Array(2) in mein Backend übergeben.

Ich sehe die Formate, wenn ich debuggen und einen Haltepunkt für die Variable festlegen.

Gibt es einen Unterschied zwischen den beiden? Dank

+0

Was versuchen Sie hier zu tun? initialisiere einfach ein Array mit der Länge == 2? – sethro

+0

Offensichtlich enthält das eine zwei Funktionen, während das andere nichts enthält. – Bergi

+0

Bitte zeigen Sie Ihren echten Code und präsentieren Sie Ihr [tatsächliches Problem] (https://meta.stackexchange.com/q/66377). – Bergi

Antwort

3

Der erste Fall:

var x = { foo: "bar", qux: 123 }; 
var y = { baz: "123", yeen: { arr: [1,2,3] }; 

var test = [ x, y ]; // [Object,Object] 

Für den zweiten Fall finden Sie MDN in der Dokumentation des Array():

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

new Array(arrayLength) 

Wenn das einzige Argument für die Array übergeben Konstruktor ist eine Ganzzahl zwischen 0 und 2^32 - 1 (inklusive), dies gibt ein neues J zurück avascript Array mit seiner Länge Eigenschaft auf diese Zahl

So Ihres zweiter Fall Code vermutlich:

var test = Array(2); 

... dies wertet tatsächlich [undefined,undefined]), aber .NET (also ASP.NET) hat kein Konzept von "undefined" (im Vergleich zu null), so dass dieser Wert nicht zu JSON serialisierbar ist (da JSON keine undefined Werte zulässt) - dies erklärt, warum es fehlschlägt.

Wenn ein „leeres“ Array-Element in Ihrer Anwendung sinnvoll ist, sollten Sie explizit null Werte stattdessen verwenden - im Idealfall mit einem Array-wörtlichen wie so:

var ret = [ null, null ]; 

Oder wenn die Anzahl der Elemente ist unterschiedlich:

var ret = Array(123); // This creates a 123-sized array, where every element is undefined. This cannot be serialized to JSON 
ret.fill(null);  // This explicitly sets every element to a null value. The array can now be serialized to JSON. 
+0

Danke @Dai, ich konnte es verfolgen und feststellen, dass ASP.NET einige leere Arrays löschte und so gab es mir Fehler. – inhaler

+0

Das Array-Literal-Äquivalent von 'Array (2)' ist '[,,]'. ;-) – RobG

+0

@RobG Guter Fang - ich habe meine Antwort geändert. – Dai

Verwandte Themen