cela revient effectivement en partie � cela!
Version imprimable
cela revient effectivement en partie � cela!
ou est le souci ?
Code:
1
2
3
4 items= [1,2,3,4,5] for (elt in items){ alert(items[elt]); }
:PCode:
1
2
3
4
5
6 Array.prototype.youpi = function(){ alert("youpi j'ai une lib qui m'ajoute des trucs dans le prototype d'Array"); }; var a =[1,2,3]; var b=[]; for(var prop in a){ b.push(prop); } return b.join(", "); //["0", "1", "2", "youpi"]
R�flexe: ne jamais utiliser for..in sur les Array
hasOwnProperty ...
forEach() ;)
ouLes vielles recettes font aussi des bons platsCode:for(var i=0; i<arr.length; i++){ }
est plus rapide ...Code:
1
2
3
4 i=-1 while( arr[++i]){ }
Dans ce cas, autant le faire de fa�on optimis�e :
:mrgreen:Code:for(var i=0, l=arr.length; i<l; i++){ }
J'utilise la m�me forme que Bovino. Mais les perfs sont quasi identiques
Par curiosit� j'ai test� une ou deux formes r�cursives pour ces boucles sur l'outil jsperf : 50% plus lente
Par contre, j'ai quand m�me un doute, le test se contente de faire une boucle de 1 � 1000 sans utiliser � proprement parler le tableau, juste en utilisant la valeur de la boucle.
Bref je sais pas si �a montre grand chose....?
pour info, j'ai test� en ajoutant une simple op�ration de concat�nation sur le contenu du tableau:
http://jsperf.com/fastest-array-loops-in-javascript/90
avec chromium (linux) la r�cursivit� serait plus rapide que toutes les autres formes de boucles.
Je pr�sume que chromium utilise V8
Sauf qu'il peut arriver que tu te retrouves avec une erreur du genre "Max Stack Exceed",
La pile de fonctions n'est pas infinie dans certains browsers
oui bien sur
elle n'est jamais infinie � ma connaissance, mais j'ai cru comprendre en �coutant Douglas Crockford que lui au moins milite pour r�soudre cette barri�re dans le futur. Je suis tr�s au fait de cette limitation car vraisemblablement on pourrait quasi "tout" faire en r�cursif sans cette limitation.
C'est juste une autre forme de syntaxe qui permet d'ex�cuter des boucles comme le ferait les syntaxes pr�sentes sur la page
C'est surtout que je n'ai pas bien compris l'int�r�t de cette page de benchmarks, o� l'on instancie un tableau de 1000 lignes dont le seul et unique usage consiste � r�cup�rer sa longueur pour d�terminer le nombre d'it�rations.
le tableau en lui-m�me n'est pas utilis� dans la boucle. On aurait pu faire un var j= 1000; pour avoir le m�me r�sultat
Si le tableau existe et est rempli, autant l'utiliser dans la boucle, �a se rapproche un peu plus de la r�alit�.
Et il se trouve que javascript excelle � la r�cursivit� en principe. Donc j'ai voulu voir comment se comparait la r�cursivit� compar�e aux autres syntaxes, tout en mettant en jeu le contenu du tableau.
Et �tonnamment sous Chrome, les performances se comparent voir sont sup�rieures.
Sous Firefox, il y a un truc avec les boucles, certaines ont des performances 400 fois sup�rieures aux autres, ce qui n'est pas le cas des autres navigateurs que j'ai test�
Bon on a d�vi� du sujet initial je pense :D
Enfin bref, toujours est-il que parcourir un Array avec un for...in n'a aucun sens. Un array est un tableau pas un objet qui sert de "map".
Sauf si tu veux parcourrir les propri�t�s de l'array ;)Citation:
toujours est-il que parcourir un Array avec un for...in n'a aucun sens.