Paris, photo, humeurs, un peu de HTML/CSS pour faire sérieux. Feinte innocence et vraie naïveté (ou vice-versa). Encore un blog qui agite ses petits bras en couinant "Viens me lire !"
Soit un tableau tab dont on veut passer en revue tous les éléments.
Une première idée pour ce faire est
for(var i = 0; i<tab.length; i++) {/* des trucs avec tab[i] */} Marche très bien, présente cependant l'inconvénient d'accéder à la propriété length du tableau à chaque itération de la boucle. Pour de très grosses boucles ou des boucles qui doivent s'exécuter très vite (gestionnaires d'événements, par exemple), le temps utilisé peut gêner.
Première variante : si la boucle ne crée ni ne supprime d'éléments dans le tableau, circonstance fréquente, on peut sauvegarder cette longueur au lancement de la boucle :
for(var i = 0, imax=tab.length; i<imax; i++) {/* des trucs avec tab[i] */} Autre économie classique : si le corps de boucle utilise plusieurs fois tab[i] le stocker dans une variable auxiliaire :
var t; for(var i = 0; i<tab.length; i++) {t=tab[i]; /* des trucs avec t */} le coup de l'imaxlorsque c'est possible :
var t; for(var i = 0, imax=tab.length; i<imax; i++) {t=tab[i]; /* des trucs avec t */} Variante élégante et intéressante : le tableau peut ne contenir aucun élément false, null, undefined ou simplement égal à zéro. C'est en particulier vrai pour les références qu'on récupère avec getElementsByTagName. On peut alors écrire ceci :
for(var i = 0, t; t=tab[i]; i++) {/* des trucs avec t */} Explication si ça vous déroute un peu : t=tab[i] est bien un test ! On ne teste pas que t est égal à tab[i] (qui s'écrirait d'ailleurs t==tab[i]) mais on exécute l'affectation t=tab[i] et on teste son résultat, qui est t. Efficace et compact.
Pour mémoire : d'autres liens JavaScript