Страницы

Поиск по вопросам

понедельник, 25 марта 2019 г.

Почему не два алерта, а три?

Есть такая функция: Array.prototype.myFunc=function(){ ...... } И если использовать такую запись: var array = ['a', 'b']; for(var ev in array) { alert(array[ev]); } То будет не 2 алерта, а 3, т.е. первый алерт будет 'a', второй 'b', а третий 'function(){ ...... }' почему? т.е. в третем алерте будет написана функция которая создана в виде Array.prototype.myFunc=function(){ ...... }


Ответ

Потому что цикл for .. in итерирует по свойствам объекта. Из документации (перевод мой): for .. in не следует использовать для итерации по массиву, если порядок индексов важен. Индексы массива -- всего лишь перечислимые свойства с именами, являющимися целыми числами, и более ничем не отличаются от обыкновенных свойств объекта. Нет никакой гарантии, что for .. in пробежит индексы в любом ожидаемом порядке; кроме того, он пробежит все перечислимые свойства, включая не являющиеся целыми числами, а также унаследованные. Добавив myFunc, вы добавили свойство ко всем массивам. Я бы посоветовал использовать просто for (var i = 0; i < array.length; i++) { alert(array[i]); }

Комментариев нет:

Отправить комментарий