Maison > interface Web > js tutoriel > le corps du texte

Comparaison de plusieurs utilisations des boucles for en Javascript et comment améliorer les performances

伊谢尔伦
Libérer: 2018-05-18 15:45:02
original
3658 Les gens l'ont consulté

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];
 //...
 }
Copier après la connexion

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];
 //...
 }
Copier après la connexion

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];
 //...
 }
Copier après la connexion

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];
 //...
 }
Copier après la connexion

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

Tout le monde a remarqué qu'il y a un

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++];) {
 //...
 }
Copier après la connexion
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 :

1. Lorsque la longueur de l'arr change dynamiquement, une boucle infinie se produira toujours ———— Parce que nous n'avons jamais mis en cache arr.length.


2. Si la boucle est un tableau de nombres, lorsque l'élément retiré (c'est-à-dire la valeur de a) est 0, la boucle se terminera (car 0 est une fausse valeur) .


3. Lorsqu'un élément du tableau est une fausse valeur (y compris une chaîne vide, 0, null, non définie), la boucle sera également terminée

afin que tout le monde utilise cette méthode d'écriture Il est préférable d'exclure la situation ci-dessus avant de l'utiliser.

Ce principe peut également être utilisé dans des boucles en ordre inverse.

Derniers conseils :

  1. Code simplifié ne signifie pas haute efficacité

  2. Don ! 't Afin de volontairement simplifier le code et perdre en performances

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 !


2. Ne déclarez pas de variables dans le corps de la boucle for (il est recommandé d'attribuer var une fois et plusieurs affectations)


2. Cachez la longueur du tableau et utilisez-la comme peu de variables possibles

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal