Autor | Zpráva | ||
---|---|---|---|
František Hliva Profil |
#1 · Zasláno: 1. 4. 2011, 22:41:36
Prečo sa neodporúča používať cyklus for in na prechádzanie položiek poľa?
|
||
_es Profil |
#2 · Zasláno: 2. 4. 2011, 00:36:32
František Hliva:
Lebo: 1) Číselný index poľa je konvertovaný na textový reťazec a tento textový reťazec späť na číslo - pri čítaní prvku poľa. 2) V tomto cykle sa zarátavajú aj normálne vlastnosti poľa aj vlastnosti zo všetkých prototypov poľa, teda Array.prototype a Object.prototype .
|
||
František Hliva Profil |
#3 · Zasláno: 2. 4. 2011, 13:19:47
_es:
Praveže cyklus for in neprechádza natívne vlastnosti ako length a podobne. Prechádza len tie vlastnoti ktorými pole programátor rozšíri. Ak sa držím pravidla že nerozširujem natívne typy javacriptu(ani nepoužívam knižnice ako Prototype alebo MooTools) tak prechádzanie pola cyklom for in bez problémov funguje. |
||
_es Profil |
#4 · Zasláno: 2. 4. 2011, 14:18:12
František Hliva:
„Ak sa držím pravidla že nerozširujem natívne typy javacriptu(ani nepoužívam knižnice ako Prototype alebo MooTools) tak prechádzanie pola cyklom for in bez problémov funguje.“ Ale ak sa používa tento cyklus na pole, tak sa o možnosť toho rozšírenia pripravím. A stále zostáva nedostatok v bode 1). Prácu s poľom vylepšuje ECMA script verzie 5, no ten je ešte málo implementovaný, alebo rôzne iné rozšírenia syntaxe JS v prehliadačoch. |
||
František Hliva Profil |
#5 · Zasláno: 3. 4. 2011, 00:03:31
_es:
to je mi jasné ja natívne typy ani nerozširujem, vačšinou to prináša len problémy. a tá konverzia na string asi bude o niečo pomalšia, ale u menších polí by to nemal byť problém u vačších polí používam cyklus for aj teraz. |
||
Chamurappi Profil |
#6 · Zasláno: 3. 4. 2011, 03:00:20
Reaguji na Františka Hlivu:
„natívne typy ani nerozširujem, vačšinou to prináša len problémy“ Ani moc ne. Čemu to vadí, krom nevhodně použitých for -in smyček?
Na Object.prototype pochopitelně nesahám, ale k Array.prototype si běžně přidávám řadu metod. Nedávno už kvůli mně upravovali jedno mapové API, kde se jim for -in zakuckával z doskriptované metody indexOf :-)
Část začátečníků neumí vycítit rozdíl mezi polem a NodeList em a u NodeList u se do iterační proměnné můžou dostat i názvy "length" , "item" atd., které jsou nativní součástí objektu. Takže případů, kdy lze tento druh smyčky beztrestně použít na něco jako pole, je méně, než by člověk znalý jiných jazyků s podobnou smyčkou čekal.
|
||
Časová prodleva: 13 let
|
0