Autor Zpráva
František Hliva
Profil
Prečo sa neodporúča používať cyklus for in na prechádzanie položiek poľa?
_es
Profil
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
_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
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
_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
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 NodeListem a u NodeListu 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.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: