3 Stimmen

Rätselhaftes Javascript Array Verhalten

Vielleicht ist das eine wirklich dumme Frage, aber ich habe offensichtlich etwas übersehen.

Betrachten Sie den folgenden Code:

    var selectedItems = [];
    selectedItems.push("0ce49e98-a8aa-46ad-bc25-3a49d475e9d3");
    //fyi, selectedItems[selectedItems.length] = "0ce49e98-a8aa-46ad-bc25-3a49d475e9d3"; produced the same result.

Am Ende selectedItems Der Inhalt sieht folgendermaßen aus:

Name              Value                                    Type
-------------     --------------------------------------   ------
selectedItems     {...}                                    Object
   -  [0]         "0ce49e98-a8aa-46ad-bc25-3a49d475e9d3"   String
   -  length      1                                        Long

Aber wenn ich einfach versuche, split() auf die gleiche Zeichenfolge aufzurufen, wie dies:

selectedItems = "0ce49e98-a8aa-46ad-bc25-3a49d475e9d3".split(",")

Jetzt sieht der Inhalt meines vermeintlichen Arrays wie folgt aus (fehlende Länge):

Name              Value                                    Type
-------------     --------------------------------------   ------
selectedItems     {...}                                    Object
   -  [0]         "0ce49e98-a8aa-46ad-bc25-3a49d475e9d3"   String

Haben Sie eine Idee, was der Unterschied ist? Was passiert hier eigentlich?
Vielen Dank im Voraus.

AKTUALISIERT : Ich habe das Gefühl, es gibt tatsächlich etwas strukturell über die beiden resultierenden Werte unterschiedlich, weil (Atlas) Ajax auf die eine mit der Länge-Eigenschaft erstickt, wenn ich versuche, es zu einem Server-seitigen WebMethod (keine tatsächliche Fehlermeldung übergeben, aber ich weiß, der Aufruf fehlschlägt). Ich bin mir nicht sicher.

UPDATE #2 Mir ist aufgefallen, dass das Einstellen der targetLocationIdList auf diese Weise dazu führt, dass die Eigenschaft "length" im Fenster Quick Watch nicht angezeigt wird:

  var params = 
  {
    jobId : args.get_JobId(), 
    targetLocationIdList : retVal.split(',')
  };

Diese Ergebnisse enthalten jedoch die Eigenschaft "Länge", die im Fenster Quick Watch angezeigt wird:

  var retValArr = [];
  retValArr = retVal.split(',');

  var params = 
  {
    jobId : args.get_JobId(), 
    targetLocationIdList : retValArr 
  };

0voto

InfinitiesLoop Punkte 13711

Woher wissen Sie, dass der Anruf fehlschlägt? Stellen Sie sicher, dass Sie im Debug-Modus arbeiten, oder verwenden Sie einen Fehler-Handler, um über den Grund informiert zu werden.

0voto

KdgDev Punkte 13733

Hier ist ein sehr einfacher Test:

var selectedItems = [];
selectedItems.push("0ce49e98-a8aa-46ad-bc25-3a49d475e9d3");
alert(selectedItems);
selectedItems = "0ce49e98-a8aa-46ad-bc25-3a49d475e9d3".split(",");
alert("boo");
alert(selectedItems.length);

Nach boo prüfen wir, ob es noch eine Länge gibt.

Antwort: Ja. Mit anderen Worten, dies ist ein Fehler von Visual Studio, das und nichts anderes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X