JavaScript “for (var i = 0; ...) { ... }” incompatibilités entre navigateurs?
Je n'ai pas fait de sérieuses de programmation JavaScript dans un moment, et je suis en train d'écrire une intro guide d'utilisation de la langue pour certains de mes collègues. J'aimerais discuter de la boucle de meilleures pratiques, mais il y a un petit détail que j'ai gardé dans un coin de ma tête:
Si la boucle sur les tableaux, je me souviens de la manière suivante pour ne pas être sûr à utiliser, car il y a des grands navigateurs qui ne supportent pas:
for (var i = 0; i < ls.length; i++) { ... }
Au lieu de cela, le mot-clé var doit être déplacé hors de la matrice, en tant que tel:
var i;
for (i = 0; i < ls.length; i++) { ... }
Est-ce correct? J'ai écumé le net et impossible de le confirmer. Faire certains navigateurs plus anciens ne supportent pas la première méthode? Si non, quels sont ceux qui ne le sont pas?
Pas les navigateurs dans l'usage commun en 2012 ne parviennent pas à soutenir ces services. Ils sont exactement la même. (Quand je dis "usage commun", je veux dire utilisé par plus d'un ou deux cas périphériques; peut-être quelqu'un de course à Netscape 3 quelque part, mais vous obtenez l'image. Et Netscape 3 probablement travaillé.)
comment vieux vous êtes à la recherche pour les obtenir? Sommes-nous parler de Netscape et IE3 ou êtes-vous référant à la version IE7 calendrier?
Dans l' (certes pas très long) moment que j'ai été codage en Javascript, je ne me souviens pas de venir à travers des problèmes lors de l'utilisation de la première méthode. Quelles sont les versions des navigateurs vous êtes à la recherche d'un soutien? Ne devrait pas être trop difficile à tester si vous avez accès à tous.
Aussi, avant de vous frapper vous-même sur ce projet, le montant de la bonne qualité JavaScript tutoriel de l'information sur le web est incroyable. Il y a littéralement des milliers de tutoriels là-bas, ainsi que de nombreuses mises à jour des livres.
OriginalL'auteur thebossman | 2012-02-13
Vous devez vous connecter pour publier un commentaire.
À moins que nous parlons vraiment, vraiment vieux navigateur, je ne suis pas au courant d'un tel problème avec les navigateurs en usage aujourd'hui.
Le seul problème que les gens ont probablement avec le premier exemple, c'est qu'il peut tromper quelqu'un en pensant que JavaScript a bloc de portée, il n'est pas Ce changé depuis ES6, qui n'ont bloc de portée.
Dans l'exemple, le
i
variable sera portée à l'affichage de la variable d'environnement, que ce soit l'affichage de l'environnement est une fonction, ou de l'environnement mondial.OriginalL'auteur
Pas nécessairement. Le point est que vous ne devez PAS oublier
var
mot-clé avant dei
sinon il va se transformer en mondiale variable. Donc, il est très bien si vous n':Vous pouvez améliorer la performance de code ci-dessus par la création d'une variables qui tient que la longueur de la matrice/collection plutôt que de le lire encore et encore, à chaque itération:
BTW, ne vous inquiétez pas à propos de navigateur, la boucle devrait fonctionner sur tous les navigateurs 🙂
En JavaScript, le tout est un objet. Dans la boucle, le tableau que vous utilisez est aussi un objet. Alors que dans la boucle, sa valeur est de lire encore et encore, à chaque itération par exemple JS accède à la matrice de propriété à chaque itération ce qui prend plus de temps que de créer une variable et l'attribution de la longueur. Bien sûr, pour la plupart des utilisateurs ou des applications, ce n'est pas beaucoup de question, mais pour orientés vers la performance ou massives des applications, il devient crucial de l'étape.
Oui, mais vous devez regarder souvent. De le stocker dans une variable locale signifie un accès encore plus rapide.
Donc, l'accès à la propriété, c'est ce cher? Sonne comme l'interpréteur/compilateur d'optimiser le ce. Intéressant, merci.
OriginalL'auteur Sarfraz
En supposant que vous n'êtes pas soutenir tous les navigateurs plus anciens que IE6, cela ne devrait pas être un problème.
OriginalL'auteur ironchefpython
JavaScript en fait déclare niveau de la fonction étendue de ne pas bloquer la portée. Les variables déclarées sont hissés au sommet de leur fonction. Ce que je dis, c'est que vos exemples sont en fait identiques. Même avec la
var
mot-clé dans lefor
déclaration, lei
variable sera accessible à l'extérieur de la boucle.La seule chose que vous avez à regarder dehors pour est si vous omettez le
var
la variable sera global et non limitée à la fonction.OriginalL'auteur Jivings
tombé sur ce aujourd'hui
mon jscript était dans un fichier xsl appelée à partir d'un fichier html - fonctionnait bien sous IE, mais pas sur les autres navigateurs - code plante et rien ne s'affiche
heureusement j'ai pu la changer, qui a travaillé pour tous les navigateurs testés
aussi être conscient de
https://support.microsoft.com/en-us/help/273793/how-to-include-client-side-script-functions-in-an-xsl-document
OriginalL'auteur user7941071
Pas que vous l'avez demandé, mais vous pouvez utiliser jQuery pour ce faire comme suit:
OriginalL'auteur GoldenNewby