Перечисление опций выбора дает разные результаты в FF и IE - PullRequest
1 голос
/ 27 января 2011

В моем коде JavaScript я пытаюсь перечислить параметры (и их значения) выбора. Вот фрагмент кода (я использую библиотеку YUI2 ... оператор log просто помещает текст в регистратор):

for (var opt in mySelect.options)
{
  YAHOO.log('my opt, val: ' + opt + ', ' + mySelect.options[opt].value);
}

В Firefox я получаю следующий (правильный) вывод:

my opt, val: 0, 2
my opt, val: 1, 1
my opt, val: 2, 3
my opt, val: 3, 4
my opt, val: 4, 0

но в Internet Explorer 7 я получаю:

my opt, val: language, undefined
my opt, val: scrollHeight, undefined
my opt, val: isTextEdit, undefined
my opt, val: currentStyle, undefined
my opt, val: document, undefined

Я немного удивлен, если не сказать больше. Я даже попытался (var opt in (mySelect.options)) и изменил имя переменной opt на всякий случай. Ничто не имело значения.

Если я закодирую цикл следующим образом:

for (var idx=0; idx< mySelect.options.length; idx++)
{
  YAHOO.log('my idx, val: ' + idx + ', ' + mySelect.options[idx].value);
}

тогда IE тоже отлично работает.

Почему первый способ не сработал? Я думал, что цикл for / in работает так же, как цикл for.

Спасибо

Пол

1 Ответ

5 голосов
/ 27 января 2011

for / in зацикливает цикл на каждом свойстве объекта.
Вы не видите эти свойства в Firefox, потому что они помечены как [DontEnum].

Вы должны использовать обычные циклы for для циклического перебора массивов.
Для обычных массивов вы можете избежать цикла for / in, пропустив ключи, если !obj.hasOwnProperty(key), но я не уверен, будет ли это работать для объектов DOM.

...