Как это работает для цикла? Это не имеет смысла для меня.Как это работает для цикла? for (; i <length; i ++)
for (; i < length; i++) {
Как это работает для цикла? Это не имеет смысла для меня.Как это работает для цикла? for (; i <length; i ++)
for (; i < length; i++) {
Цикл будет просто повторяют до тех пор, как i
меньше length
. Он просто предполагает, что i
уже объявлен в другом месте.
Собственно, все части в рамках конструкции цикла for
являются необязательными. Например, это вполне допустимый способ создать бесконечный цикл:
for(;;) window.alert('Are you sick of alerts yet?');
Это обычный for
цикл, который ничего не делает вообще на стадии инициализации.
Это эквивалентно записи:
;
while (i < length) {
// ...
i++;
}
за исключением, если есть в ...
кузове continue
, в этом случае петля for
будет выполнять в i++
перед повторной оценки состояния, и цикл while
не будет ,
Так почему бы вам предпочесть писать это по простому циклу 'while'? –
@ nl-x: Хорошая точка. Он более компактный, хотя и немного менее читаемый; однако, если * намерение * должно иметь нормальный цикл 'for', и просто не требуется никакого шага инициализации, тогда я не вижу ничего плохого в использовании этой формы. Реальная разница возникает, если в теле цикла есть 'continue' - форма' for' увеличивается, но форма 'while' не работает. Я отредактировал свой ответ, чтобы отразить это, спасибо. – Cameron
Извините, я не смотрел четко. Я думал, что часть 'i ++' также была опущена, например 'for (; i
+1 для 'for (;;)', который возвращает воспоминания, прежде чем я понял, что 'while (true)' был более разборчивым (по какой-то причине я был введен в 'for (;;)' как канонический способ создания бесконечного цикла) ... – Cameron
Да, JavaScript - это уникальный язык в том, что эти виды хакерских ярлыков несколько поощряются * просто для сохранения байтов по проводу. В противном случае 'while (true)', безусловно, легче читать. Кастинг с '!!' или '~~' тоже забавный. –
Hah, но я на самом деле учил C++ в то время (первый язык программирования), а не JavaScript! ;-) – Cameron