¿Cómo funciona esto para el bucle? No tiene sentido para mí.¿Cómo funciona esto para el bucle? for (; i <length; i ++)
for (; i < length; i++) {
¿Cómo funciona esto para el bucle? No tiene sentido para mí.¿Cómo funciona esto para el bucle? for (; i <length; i ++)
for (; i < length; i++) {
El bucle simplemente repetir tanto tiempo como i
es menor que length
. Simplemente supone que i
ya está declarado en otro lugar.
En realidad, todas las piezas dentro de una construcción de lazo for
son opcionales. Por ejemplo, esta es una forma perfectamente válida para crear un bucle sin fin:
for(;;) window.alert('Are you sick of alerts yet?');
Es un bucle for
regular que no hace nada en absoluto en la etapa de inicialización.
Esto es equivalente a la escritura:
;
while (i < length) {
// ...
i++;
}
excepto si hay un continue
en el cuerpo ...
, en cuyo caso el bucle for
ejecutaría la i++
antes de volver a evaluar la condición, y el bucle while
no lo haría .
¿Por qué uno preferiría escribir esto en un simple ciclo 'while'? –
@ nl-x: Buen punto. Es más compacto, aunque un poco menos legible; sin embargo, si el * intento * es tener un bucle 'for 'normal, y sucede que no es necesario un paso de inicialización, entonces no veo nada de malo con el uso de ese formulario. La diferencia real surge si hay un 'continuar' dentro del cuerpo del bucle - la forma' for' se incrementa, pero la forma 'while' no. He editado mi respuesta para reflejar esto, gracias. – Cameron
Lo siento, no estaba mirando claramente. Pensé que la parte 'i ++' también se había omitido, por ejemplo 'for (; i
+1 for 'for (;;)', que trae recuerdos de antes de que me diera cuenta de que 'while (true)' era más legible (por alguna razón, me presentaron 'for (;;)' como el canónico forma de crear un bucle infinito) ... – Cameron
Sí, JavaScript es un lenguaje único en el sentido de que este tipo de atajos hacky-ish son un tanto * estimulados * solo para ahorrar bytes a través del cable. De lo contrario, 'while (true)' es más fácil de leer. Casting con '!!' o '~~' también es divertido .. –
¡Ja, pero en realidad estaba aprendiendo C++ en ese momento (primer lenguaje de programación), no JavaScript! ;-) – Cameron