Не понимаю нюансов JavaScipt. Объясните почему код так работает?

var href = 'blabla',
      arrayA = ev.srcElement.getElementsByTagName('a') || [];
arrayA.push(href)
//выкидывает
TypeError: undefined is not a function
// проверяю в консоли
arrayA
[]
typeof arrayA
"object"
arrayA.push('dddd')
TypeError: undefined is not a function
arrayA = []
[]
typeof arrayA
"object"
arrayA.push('dddd')
1
  • Вопрос задан
  • 2506 просмотров
Решения вопроса 1
ghaiklor
@ghaiklor
NodeJS TechLead
getElementsByTagName возвращает объект HTMLCollection у которого нету метода push. А когда вы присвоили переменной [] - это уже массив, у которого есть метод push.
Если хотите выполнить push к HTMLCollection, то делайте это так:
Array.prototype.push.call(arrayA, 'dddd');
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
KOLANICH
@KOLANICH
Знаю JS, PHP, C++, C#
srcElement - это эксплолероспецифичное несовместимое апиговно
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Либо еще один вариант.

var arrayA = [].slice.call(document.getElementsByTagName('a'));
// Теперь можно работать с arrayA, как с массивом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы