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

Choses à noter lors de l'utilisation de boucles for en javascript

巴扎黑
Libérer: 2017-08-22 11:11:54
original
1761 Les gens l'ont consulté


L'utilisation d'une boucle est pratique si vous souhaitez exécuter le même code encore et encore, avec des valeurs différentes à chaque fois.

Souvent, nous utilisons des boucles for, et le département des boucles for boucle souvent sur un tableau. Plusieurs fois, nous l'écrivons comme ceci :

// 次佳的循环
for (var i = 0; i < myarray.length; i++) {
 // 使用myarray[i]做点什么}
Copier après la connexion

Codez comme celui-ci Bien qu'il n'y ait pas de gros problème. , chaque boucle obtiendra la longueur du tableau, ce qui réduira votre code, surtout lorsque myarray n'est pas un tableau, mais un objet HTMLCollection.

Regardez à nouveau le code suivant :

for (var i = 0, max = myarray.length; i < max; i++) {
 // 使用myarray[i]做点什么}
Copier après la connexion

Ce code n'obtiendra la longueur du tableau qu'une seule fois, ce qui améliore la qualité du code

est accompagné ; par une seule forme var, vous pouvez retirer les variables de la boucle, comme ceci :

function looper() {
 var i = 0,
  max,
  myarray = [];
 // ...
 for (i = 0, max = myarray.length; i < max; i++) {
  // 使用myarray[i]做点什么
 }}
Copier après la connexion

Résumé des problèmes lorsque JavaScript utilise des boucles for

La discussion sur ce problème est venue à l'origine de l'e-mail interne de l'entreprise, je viens d'enregistrer la discussion sur ce problème.

Lors de la localisation du problème, certaines équipes de projet ont constaté que lors de l'utilisation de « for(x in array) », ​​x apparaissait de manière inattendue dans la valeur du navigateur IE.

Plus précisément, si la méthode Array.prototype.indexOf est personnalisée (par exemple, en raison d'une certaine pollution du prototype), cela peut être dû au fait que l'ancienne version du navigateur IE ne prend pas en charge le array.indexOf. Et les développeurs souhaitent l'utiliser, donc un tel navigateur peut avoir le problème suivant :

Array.prototype.indexOf = function(){...};
var arr = [1, 2];for (x in arr) console.log(x);
Copier après la connexion

//affichera

1
2function(){…}
Copier après la connexion

En d'autres termes, la méthode indexOf est affichée.

La solution est simple, soit n'ajoutez pas cette méthode, soit utilisez une boucle comme "for (i=0; i < array.length; i++)" etc.

Mais quelle est la nature du problème ? Certaines personnes pensent que cela peut être dû au fait que l'utilisation de for(x in obj) consiste en fait à traverser un objet, et que l'implémentation de array est en fait la même que celle des objets ordinaires, sauf que key est C'est juste une valeur donnée :

{0:"something", 1:"something else"}
Copier après la connexion

Il a également été mentionné dans une question et réponse stackoverflow qu'il y a une différence entre utiliser for...in et for(;;) lors de la traversée un tableau. Le sens du premier est d'énumérer des objets, il y a deux problèmes :

L'ordre d'énumération ne peut pas être garanti ;

les attributs hérités sont également énumérés ; 🎜> n'est pas correct pour

Array.prototype Concernant la prise en charge de .forEach

, il ressort clairement de ce tableau que IE8 et les versions antérieures ne peuvent pas être prises en charge avec précision : Il existe également une compatibilité avec la méthode forEach Elaboration du sexe. En fait, les principaux frameworks JavaScript (tels que jQuery, Underscore, Prototype, etc.) ont tous des implémentations sûres et générales de fonctionnalités pour chaque.

Il est également mentionné dans le chapitre for in de JSLint que l'instruction for in permet de parcourir les noms d'attributs de l'objet, mais elle traversera également les attributs hérités de la chaîne de prototypes, qui dans de nombreux cas provoquera des imprévus autres que des erreurs. Il existe une solution grossière :

Quelqu'un a également mentionné le problème lors de l'utilisation de
for (name in object)
 { if (object.hasOwnProperty(name))
 { .... } }
Copier après la connexion
for(var i=0;i similaire à cette boucle, car JavaScript Il existe pas de variables au niveau du bloc de code, donc l'autorisation d'accès de i ici est en fait la méthode où elle se trouve. Certains livres conseillent aux programmeurs de placer ces déclarations de variables au même endroit, mais intuitivement parlant, cela n'est pas assez raisonnable dans la plupart des cas. L'utilisation de "let" introduite dans JavaScript 1.7 peut résoudre ce problème, faisant de i une véritable variable de niveau bloc de code :

Enfin, dans le guide de style JavaScript de Google, implique également cette contrainte :
for(let i =0; i < a.length; i++)
Copier après la connexion

Ce qui précède représente l'intégralité du contenu de cet article sur les problèmes auxquels il convient de prêter attention lors de l'utilisation de boucles for en javascript - avec un résumé des questions, j'espère que cela sera utile pour les travaux futurs et. étude, et bienvenue à tous les initiés de l'industrie qui ont fait des critiques et des suggestions.
for-in loop:
Only for iterating over keys in an object/map/hash
Copier après la connexion

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