2010-02-12 5 views
8

Que fait le javascript suivant?Javascript - que fait cette ligne?

var groups = countrylist.split(',');  
for(var i = -1, group; group = groupsCounty[++i];){ 
    ... 
} 
+1

Est-ce que 'groups' et' groupsCounty' sont supposés être la même variable? –

+0

J'aimerais savoir - j'essaie de savoir ce qui est cassé sur la page: p – digiguru

+0

C'est cassé à coup sûr. Changer 'var groups = countrylist.split (',');' pour 'var groupsCounty = countrylist.split (',');'. Probablement que quelqu'un refactoring et renommé cette variable, mais n'a pas terminé son travail. –

Répondre

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) 

Il est une version optimisée de:

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

Est-il sécuritaire de boucler de cette manière? (comme cela fonctionne-t-il dans tous les navigateurs?) – digiguru

+0

La boucle for-question de la question surpasse-t-elle réellement la boucle for dans cette réponse? En CPU ou en mémoire utilisé? – jpabluz

+0

@David, est-ce exact? group = groupsCounty [++ i] est un peu confus pour moi –

2

Il s'agit d'itérations sur les éléments de groupes en utilisant la présence d'une valeur dans le groupe comme condition de garde. c'est-à-dire utiliser la vérité JavaScript pour contrôler le nombre de fois que la boucle se répète, car la garde sera fausse quand aucune valeur ne peut lui être affectée.

1

Le for loop parcourt le tableau groups jusqu'à ce que groupsCounty[++i] renvoie une valeur fausse.

Avec l'utilisation des termes suivants:

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

La initiale expressionvar i = -1, group déclare les variables i et group. Pour chaque itération, la condition en bouclegroup = groupsCounty[++i] attribue la valeur de tableau suivante à group. Si cette expression est fausse (par exemple groupsCounty[++i] renvoie undefined en dehors des limites), la boucle s'arrête. Et l'expression finale est vide car i est déjà augmenté dans l'expression contition.

-1

Il est équivalent à

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

Avec la valeur ajoutée d'avoir accès à l'index (i).

+0

'group' serait __be__ la valeur de l'index, vous devrez alors déréférencer le tableau en utilisant' anotherVariable = groupdCountry [group] 'pour acquérir la valeur. – AnthonyWJones

+1

Ce n'est pas équivalent. Une boucle 'for ... in' énumère toutes les propriétés de l'objet, y compris les propriétés héritées du prototype de l'objet, dans un ordre indéfini. Donc, vous avez un ordre de boucle différent et potentiellement plus de propriétés étant itérées plus de. De plus, dans votre exemple, 'group' serait le nom de la propriété plutôt que la valeur de la propriété telle qu'elle est dans la question initiale. –

2

Son faire: -

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

La seule différence est que ce qui précède est beaucoup plus fréquent et plus facilement reconnaissable. Vous n'auriez pas posté le code ci-dessus demandant "Qu'est-ce que ça fait?".

Le code que vous avez posté est un exemple de développement intelligent mais pas nécessairement de bonne pratique de codage.