Справочная информация:
Я столкнулся с очень странным явлением при работе со списком узлов.Я хотел использовать getElementsByClassName или что-то подобное, а затем отсортировать его.Я решил, что одним из способов будет перебирать нодлист, помещать каждый элемент в массив и сортировать массив.(Кстати, это сработало, но не так, как ожидалось).Я пытался использовать for (var i in nodeList)
для итерации, но он выдавал исключение для последних нескольких элементов, которые не были определены.странная часть в том, что я мог бы вместо этого использовать for (var i = 0; i < nodeList.length; i++)
.Я только что проверил это снова и на странице stackoverflow я запустил в своей консоли следующий код:
for (var i in document.getElementsByTagName("span"))
console.count("items");
console.log(document.getElementsByTagName("span").length);
Он отсчитал до items: 382
, но длина дала 380
.Как и ожидалось, когда я вошел в document.getElementsByTagName("span")[380]
и document.getElementsByTagName("span")[381]
, они вернулись неопределенными.Это странное поведение не происходит в массивах (предоставлено, списки узлов и массивы различны, но это доказывает, что это не отличается для циклов, вызывающих проблему).
question:
Почему конструкции for(var i in nodeList)
ведут себя по-разному в списках узлов, возвращая пару неопределенных элементов в конце?