Ce buclă for ar trebui să folosesc pentru array-urile și obiectele JavaScript?
Întotdeauna folosesc for (i=0; i<array.length; i++) când parcurg array-urile.
Întotdeauna folosesc for (var i in object) când parcurg proprietățile unui obiect.
Nu pot folosi for (i=0; ... ) pentru proprietățile obiectelor, dar pot folosi for (var in ...) pentru array-uri, deoarece array-urile sunt și ele obiecte.
Întrebarea pe care o pun este: ar trebui să renunț complet la for (i=0; ... ) și să folosesc for (var in ...) pentru ambele arrays și obiecte? Există o pierdere de performanță? De ce aș folosi unul în locul celuilalt?
Răspuns #1
Am făcut un jsperf pentru tine :
http://jsperf.com/for-vs-for-in43
Practic, testează performanța și poți observa o scădere mare a performanței atunci când folosești for(var i in array).
Asta fiind spus, nu ar trebui să renunți la for pentru for in.
Răspunsul #2
ar trebui să renunț la
for
Nu ar trebui. for..in, atunci când este folosit pentru a parcurge array-uri, nu ține cont de index și va lista și proprietățile atașate obiectului. Folosește for pentru array-uri și for..in pentru obiecte.
Un pasaj din MDN:
for..innu ar trebui utilizat pentru a itera peste un Array unde ordinea indexului este importantă... Nu există nicio garanție căfor..inva returna indexurile într-o anumită ordine și va returna toate proprietățile enumerabile...
În ceea ce privește performanța, nu m-aș îngrijora, deoarece for..in pentru a parcurge array-urile indexate nu este recomandat evident.