Maison > Article > interface Web > Comparaison de plusieurs utilisations des boucles for en Javascript et comment améliorer les performances
La boucle for sera utile lorsque nous parcourons des objets ou des tableaux en js. Jetons un coup d'œil à quelques exemples d'utilisation de la boucle for. Les détails de l'opération spécifique sont présentés ci-dessous.
s'écrit généralement comme suit :
for(var i = 0;i< arr.length;i++) { var a = arr[i]; //... }
Il s'agit d'une séquence courante et positive pour la boucle. Tout le monde connaît les inconvénients d'écrire de cette façon : prendre la longueur de arr et la comparer avec i à chaque fois est un gaspillage de performances (et si la longueur de arr change dynamiquement, une boucle infinie se produira). La façon d'améliorer cette boucle est d'utiliser des variables pour enregistrer arr.length
:
for(var i = 0, al = arr.length;i< al;i++) { var a = arr[i]; //... }
Cela peut légèrement améliorer les performances par rapport à la première méthode. Si le tableau est long, il peut s'améliorer encore plus.
Mais l'écrire de cette façon ajoute une autre variable al, et cette variable n'est utile que par rapport à i, ce qui semble un peu inutile.
Si l'ordre des boucles n'est pas important pour vous, alors vous pouvez essayer de boucler dans l'ordre inverse :
for(var i = arr.length-1;i > -1;i--) { var a = arr[i]; //... }
De cette façon, il y aura moins de variables et la longueur de l'arrêt sera mise en cache. Les performances sont également bonnes. Mais le code ici est un peu mal écrit (je l'ai fait exprès), d'abord i = arr.length-1
(il veut en fait -1, putain), et ensuite la condition i > pour les personnes atteintes de mysophobie.
Ce qui suit est l'ordre inverse couramment utilisé pour la méthode d'écriture en boucle :
for(var i = arr.length;i--;) { var a = arr[i]; //... }
C'est déjà très simplifié. Le principe doit être compris : la condition pour que la boucle for continue à s'exécuter est que le jugement entre ; Parce que vous devez découvrir que i a changé dans le corps de la boucle for); toujours 1, mais après être entré dans le corps de la boucle, il est 0, donc la dernière boucle peut être exécutée normalement ; quand i=0, i– est toujours 0 et 0 n'est plus vrai, donc la boucle ne continuera pas à s'exécuter ; . i=arr.length
dans le corps de la boucle for de tous les codes ci-dessus, qui est utilisé pour supprimer l'élément du tableau actuellement utilisé en boucle. C'est en fait un gaspillage, et jsLint et d'autres vous le diront : ne déclarez pas de variables dans une boucle. . . var a = arr[i]
Le for dans l'ordre inverse peut être simplifié à ceci, mais je veux juste l'ordre direct, et il doit être efficace et avoir moins de variables. Que dois-je faire ?
est la suivante :for(var i = 0, a;a = arr[i++];) { //... }L'avantage de cette façon d'écrire est qu'il est presque inévitable que
disparaisse, et la phrase évoquée plus haut concernant la suppression du l'élément du tableau actuellement bouclé est également disparu. arr.length
Principe :
, ici est utilisé comme condition pour que la boucle soit exécutée. Notez qu'il n'y a qu'un seul signe = ici, donc c'est le cas. pas une phrase de jugement, mais une instruction d'affectation. Attribuez simplement a = arr[i++]
à a, puis déterminez si a est une vraie valeur. Je n'entrerai pas dans les principaux types de i++ et i–. Je dirai seulement que lorsque i++ dépasse la longueur du tableau, la boucle doit s'arrêter, et elle s'arrête vraiment ici. Pourquoi ? Parce que arr[i++]
, si vous obtenez un élément qui dépasse la longueur du tableau lui-même, vous n'obtiendrez qu'une valeur indéfinie, et undéfini est une valeur fausse, et la condition de boucle échouera. a=arr[i++]
Bien sûr, les inconvénients d'écrire de cette façon sont également évidents :
Derniers conseils :
Au fait, voici quelques points pour améliorer les performances de la boucle for :
1. Pause au bon moment ! Pas besoin de traverser Tous doivent ajouter des conditions d'évasion !Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!