2010-02-12 16 views
8

Was macht das folgende Javascript?Javascript - was macht diese Zeile?

+1

Sind 'groups' und' groupsCounty' die gleiche Variable? –

+0

Ich würde gerne wissen - ich versuche herauszufinden, was auf der Seite kaputt ist: p – digiguru

+0

Das ist sicher gebrochen. Ändern Sie 'var groups = countrylist.split (',');' für 'var groupsCounty = countrylist.split (',');'. Wahrscheinlich hat jemand diese Variable umgestaltet und umbenannt, aber seine Arbeit nicht beendet. –

Antwort

11
With i starting at -1 
increase i by 1 
get the ith element from the groupsCounty array 
if there is no such element: stop 
otherwise: assign it to group and carry on (with whatever "…" is) 

Es ist eine optimierte Version von:

for (var i = 0; i < groupsCounty.length; i++;){ 
    var group = groupsCounty[i]; 
    … 
} 
+0

Ist es sicher, auf diese Weise eine Schleife zu machen? (Wie funktioniert es in allen Browsern?) – digiguru

+0

Übertrifft die for-Schleife der Frage tatsächlich die for-Schleife in dieser Antwort? In CPU oder im Speicher verwendet? – jpabluz

+0

@David, stimmt das? group = groupsCounty [++ i] ist ein bisschen verwirrend für mich –

2

Es wird über die Elemente von Gruppen iteriert, wobei das Vorhandensein eines Werts in der Gruppe als Schutzbedingung verwendet wird. d. h. Verwendung von JavaScript-Wahrhaftigkeit, um die Anzahl der Wiederholungen der Schleife zu steuern, da der Schutz falsch ist, wenn kein Wert zugewiesen werden kann.

1

Die for loop führt durch das groups Array, bis groupsCounty[++i] einen falschen Wert zurückgibt.

Mit Verwendung der folgenden Begriffe:

for (<initial-expression>; <condition>; <final-expression>) 

Die Anfangsausdruckvar i = -1, group deklariert die Variablen i und group. Für jede Iteration ordnet die Schleife Bedingunggroup = groupsCounty[++i] den nächsten Array-Wert zu group zu. Wenn dieser Ausdruck falsch ist (z. B. groupsCounty[++i] gibt undefined zurück, wenn er außerhalb der Grenzen liegt), wird die Schleife angehalten. Und der Endausdruck ist leer, da i bereits innerhalb der Contition Ausdruck erhöht ist.

-1

Es äquivalent ist

for (var group in groupsCounty) { 
    ... 
} 

Mit dem Mehrwert (i) mit dem Indexzugriff haben.

+0

"Gruppe" wäre __be__ der Indexwert, dann müssten Sie das Array dereferenzieren, indem Sie 'anotherVariable = groupdCountry [group]' verwenden, um den Wert zu ermitteln. – AnthonyWJones

+1

Es ist nicht gleichwertig. Eine 'for ... in'-Schleife zählt alle Eigenschaften des Objekts auf, einschließlich der vom Prototyp des Objekts geerbten Eigenschaften in einer undefinierten Reihenfolge. Sie haben also eine andere Schleifenreihenfolge und möglicherweise werden mehr Eigenschaften iteriert. In Ihrem Beispiel wäre "group" der Eigenschaftsname und nicht der Eigenschaftswert wie in der ursprünglichen Frage. –

2

Sein dies zu tun: -

var groups = countrylist.split(',');  
for(var i = 0; i < groups.length; i++) 
{ 
    var group = groups[i] 
    ... 
} 

Der einzige wirkliche Unterschied ist, dass die oben ist weitaus häufiger und leichter erkennbar. Sie hätten den obigen Code nicht mit der Frage "Was macht das?" Gepostet.

Der Code, den Sie gepostet haben, ist ein Beispiel für clevere Entwicklung, aber nicht unbedingt gute Programmierpraxis.