Как работает этот критерий остановки (для цикла)?

Я искал способ вводить данные из моей HTML-формы в мой код javascript без промежуточного сервера и нашел этот пост в Stackoverflow: Как использовать HTML-формы без сервера

Там первый ответ включал следующую ссылку на пример кода на js.fiddle: http://jsfiddle.net/wG8K4/1/

function updateBackgroundColor(color) {
  document.body.style.backgroundColor = color;
}

function displayFormContents(someForm) {
 var out = '';
    for (var i=0, el; el = someForm.elements[i]; i++) {
        if (el.name) {
            out += el.name + ' = ' + el.value + '\n';
        }
    }
 alert(out);
}
<form>
 <select name='gender' onchange='updateBackgroundColor(this.value);return false;'>
 <option value=''>Select A Gender</option>
 <option value='blue'>Male</option>
 <option value='pink'>Female</option>
 </select><br/>
 type your nickname: <input type='text' name='nickname' /><br />
 <input type='button' value='Display Form Contents' onclick='displayFormContents(this.form);return false;' />
 </form>

Я опробовал этот подход в своем собственном коде, и он работает. Однако я не понимаю, как работает этот критерий остановки Oo

el = someForm.elements[i]

срабатывает ли этот критерий остановки, когда индекс достигает значения, в котором больше нет соответствующего элемента массива (таким образом, массив, вероятно, возвращает что-то вроде undefined / false)? Думаю, да, потому что я также мог заметить, что цикл повторяется всего 2 раза (индекс 0 и 1). Однако у меня нет возможности проверить это предположение, и поэтому я хотел спросить здесь.

Это ужасная практика. Не используйте такой цикл.

Bergi 11.04.2018 14:15

да, теперь, когда был упомянут подход "длины", я увидел, что нет необходимости идти по этому пути, и переставил свой код на светлую сторону: D

Skeptic123 11.04.2018 14:23

Или даже for (const el of someForm.elements) {, современный вариант :-)

Bergi 11.04.2018 14:25
0
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

el = undefined - это undefined, который представляет собой значение ложь, которое останавливает цикл.

Это означает, что цикл останавливается, как только i становится больше или равно someForm.elements.length (когда someForm.elements[i] - это undefined).

Только когда я достигну длины массива, ofc

vityavv 11.04.2018 13:51

Я единственный, кто думает, что это плохой пример кода для показухи? Я советую не кодировать таким образом, потому что это требует много времени, чтобы понять.

Droidum 11.04.2018 13:59

Другие вопросы по теме