2016-08-05 5 views
0

Ich versuche, ein Array von Objekten zu definieren, die ich später durchlaufen kann basierend auf der Eigenschaft Länge des Arrays. Im Internet Explorer funktioniert es wie erwartet, aber nicht in Chrome. Im Folgenden ist ein Ausschnitt aus Code, der das Array von Objekten definiert:Javascript in Chrome nicht dieselbe Array-Länge wie Internet Explorer

var status = 
[ 
    { 
     name: 'Open', 
     target: 
     [ 
      { 
       systemgenerated: 'false', 
       internalonly: 'true', 
       name: 'Closed' 
      }, 
      { 
       systemgenerated: 'true', 
       internalonly: 'true', 
       name: 'Done' 
      } 
     ] 
    }, 
    { 
     name: 'Pending', 
     target: 
     [ 
      { 
       systemgenerated: 'false', 
       internalonly: 'true', 
       name: 'Closed' 
      }, 
      { 
       systemgenerated: 'false', 
       internalonly: 'true', 
       name: 'Open' 
      } 
     ] 
    } 
]; 

im Internet Explorer status.length kehrt 2. In Chrome es 31 auf der Grundlage von Beispielen liefert ich auf Stack gesehen habe, habe ich Ich habe versucht, das Objekt auf verschiedene Arten zu definieren, damit es in Chrome wie ein Array funktioniert, aber ich habe noch keine Fortschritte erzielt. Gibt es eine Möglichkeit, dies in Chrome zu definieren, die so wirkt, als würde ich erwarten, dass ein Array funktioniert?

Danke!

+1

Chrome [kehrt auch '2'] (https://jsfiddle.net/vvmfeqd8/). Es muss etwas anderes passieren. –

+0

komisch, ich könnte das Problem in Chrome mit dem gleichen Code replizieren, zeigt 31 in Chrom und 2 in IE - http://codepen.io/nagasai/pen/yJRRgd –

+0

@NagaSaiA Das liegt daran, dass jsfiddle den Code innerhalb eines Fensters umschließt .onload standardmäßig, aber codepen legt es nur an das Ende des Körpers, nicht innerhalb einer Funktion. Bedeutung in Codepen diese Variable geht auf das Fensterobjekt, und von dort können Sie auf cdrinis Antwort schauen, um zu sehen, was als nächstes passiert = P –

Antwort

2

Sehr seltsam! Anscheinend status ist ein reserviertes Wort in HTML5, das den Text der Statusleiste ändert (also muss es eine Zeichenfolge sein).

var status = []; wird window.status überschreiben, wenn es nicht in einer Funktion ist. In diesem Fall konvertiert chrome es in eine Zeichenfolge, weshalb Sie einen Fehler erhalten.

Entweder den Variablennamen ändern oder alles in eine Funktion umbrechen, um einen isolieren Bereich zu erstellen.

var status = [ {}, {} ]; 
 
console.log(status);  // "[object Object],[object Object]" in Chrome 
 
console.log(status.length); // 31 in Chrome

(function() { 
 
    var status = [ {}, {} ]; 
 
    console.log(status);  // the array 
 
    console.log(status.length); // 2 
 
})();

+0

[Entsprechend der Spezifikation] (https://www.w3.org/TR/html5/browsers .html # dom-window-status), es sieht so aus, als wäre chrome rechts: "Aus historischen Gründen muss das Statusattribut des Window-Objekts beim Abrufen den letzten ** String ** zurückgeben, der auf" – cdrini

+0

gesetzt wurde Vielen Dank! Ich drehte mich im Kreis und versuchte herauszufinden, was falsch war. – Alan

Verwandte Themen