467 votes

JavaScript dédiée.. vs pour

Ne pensez-vous pas qu’il y a une grande différence dans les tuyaux pour.. dans et pour les boucles ? Quel genre de « pour » préférez-vous utiliser et pourquoi ?

Disons que nous avons un tableau de tableaux associatifs :

Donc nous pouvons itérer :

Et :

Je ne vois pas une grande différence. Y a-t-il des problèmes de performances ?

550voto

AnthonyWJones Points 122520

Le choix doit reposer sur le lequel idiome est mieux comprise.

Un tableau est itéré à l’aide :

Un objet utilisé comme un tableau associatif est itéré à l’aide :

Sauf si vous avez brisant les raisons de la terre, s’en tenir à l’habitude de son utilisation.

163voto

Bno Points 5688

Douglas Crockford recommande en JavaScript: Les Bonnes Parties (page 24) pour éviter d'utiliser l' for in déclaration.

Si vous utilisez for in boucle sur les noms de propriété à un objet, les résultats ne sont pas commandés. Pire: Vous pouvez obtenir des résultats inattendus; il comprend les membres hérités de la chaîne de prototype et le nom des méthodes.

Tout, mais les propriétés peuvent être filtrés .hasOwnProperty. Javascript: Les Bonnes Parties présente cet exemple de code qui fait ce que vous voulaient probablement à l'origine:

for(var name in obj)
{
    if (obj.hasOwnProperty(name))
    {
    }
}

62voto

Jason Points 1839

FYI - jQuery Utilisateurs


jQuery each(callback) méthode utilise for( ; ; ) boucle par défaut, et d'utiliser des for( in ) seulement si la longueur est undefined.

Donc, je dirais qu'il est sûr de supposer que le bon de commande lors de l'utilisation de cette fonction.

Exemple:

$(['a','b','c']).each(function() {
    alert(this);
});
//Outputs "a" then "b" then "c"

L'inconvénient de l'utilisation de ceci est que si vous faites des non logique de l'INTERFACE utilisateur, vos fonctions seront moins portable à d'autres cadres. L' each() fonction est probablement préférable de réserver pour une utilisation avec des sélecteurs jQuery et for( ; ; ) pourrait être souhaitable autrement.


29voto

Gene Points 1222

Il y a des différences de rendement selon quel type de boucle que vous utilisez et sur quel navigateur.

Par exemple :

est presque deux fois plus vite sur certains navigateurs que :

Toutefois, à moins que vos baies sont enormes ou vous en boucle sans cesse tous sont assez rapides. Je doute sérieusement que le tableau de bouclage est un goulot d’étranglement dans votre projet (ou pour tout autre projet d’ailleurs)

26voto

Sam Dutton Points 4638

Notez que la méthode Array.forEach native est maintenant largement pris en charge.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X