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..in nu ar trebui utilizat pentru a itera peste un Array unde ordinea indexului este importantă... Nu există nicio garanție că for..in va 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.