JavaScript for each statement
Днешния преглед на блоговете (в неделя сутринта обикновено няма новости) не се отличаваше с нищо интересно - поне на пръв поглед. Преглеждах набързо пост по една от болните теми - разширяването на вградени обекти, когато това изречение
This includes the for(i in o) and for each(i in o) iterators, …
Ме притесни. JavaScript има for each? Отворих scite и надрасках
var o = { a : 1, b : 2};
for each(i in o)
{
alert(i);
}
Тръгна под Firefox 1.5.0.4 - i е стойността, а не ключа от обекта. Не работи под IE със синтактична грешка. Ясно, езиково “нововъведение” на мозилците.
Сега, тук идва по-трудното - да намериш информация за for each в Гугъл. След няколко неуспешни търсения (едното от които ме прати на доста интересен резултат) в крайна сметка мозилското wiki не ме предаде - for each statement е имплементиран в JavaScript 1.6. Това добре.
Kакво обаче е JavaScript 1.6 и откъде накъде Мозила имплементират разни работи по него? Според wikipedia (наред с многото глупости)
The previous version 1.6 corresponded to ECMA-262 Edition 3 like JavaScript 1.5, except for Array extras, and Array and String generics…
Пак според wikipedia третата ревизия на ECMAта е почти имплементирана от всички браузъри. Фор ийч обаче отсъства от IE; доколкото знам, и в IE 7 няма да има никакви нововъведения в тази насока. Сиреч for each в javascript засега ще остане нещо, което става само за Минута е много - знание без особена полза.
Юли 16th, 2006 at 10:41 am
for (var i in o) {
alert(o[i]);
}
Не е толкова красиво като for each, но раоти навсякъде.
Юли 16th, 2006 at 1:22 pm
Бих ползвал prototype ако става за въпрос - там имат приятна each циклия. Другото хубаво, което мозилците са имплементирали (и може да бъде направено за IE) е Array::forEach. Чиято имплементация би трябвало да изглежда горе долу така:
if (!Array.prototype.forEach) { Array.prototype.forEach = function (closure) { var context = arguments[1] || null; for (var i = 0; i < this.length; i ++) { arguments[0].call(context, this[i], i, this); } } } [1, 2, 3, 4].forEach(function (el){alert(el)})