Страницы

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

вторник, 28 января 2020 г.

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

#javascript


Есть такая функция:
  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(){ ...... }
    


Ответы

Ответ 1



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

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

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