Не используйте for ... in
для таких циклов. Вместо этого:
for (var index = 0; index < foo.length; ++index) {
if (foo[index].value === 'whatever') { return 1; }
}
Форма цикла for ... in
предназначена для просмотра свойств объекта. То, что у вас здесь есть, это действительно объект, но, что более важно, он действует как массив. (Это на самом деле NodeList HTMLCollection, но для обхода контента его можно рассматривать как массив.) Преимущество итерации по числовому индексу состоит в том, что вы избегаете споткнуться со свойствами объекта, которые на самом деле не являются частью его концептуального содержания.
Ваша другая проблема заключалась в использовании «элемента» в этом выражении индексации; Я не знаю, что такое "элемент" / был, но вы хотите использовать переменную итератора.
изменить & mdash; Разница между тем, что я считаю «элементами» (NodeList) и тем, чем он является (HTMLCollection), заключается в том, что API коллекции имеет как фасад с числовым индексированием, так и фасад с индексированным именем. Дело в том, что если вы каким-то образом знаете имена, внешние по отношению к форме, то метод доступа по имени имеет смысл. Тем не менее, с тем, что вы делаете, я бы все еще использовал числовой итератор, потому что в противном случае все становится немного грязным (для меня). Может быть, я просто слишком параноик, поэтому, возможно, кто-то с большим пониманием прокомментирует или ответит. На мой взгляд, способ, которым браузеры делают определения IDL из спецификации DOM в JavaScript, является областью некоторой ненормальности.