2012-10-09 31 views
65

¿Hay otras maneras de incrementar un bucle for en Javascript además de i++ y ++i? Por ejemplo, quiero incrementar en 3 en lugar de uno.¿Se puede incrementar/disminuir un bucle en más de uno?

for (var i = 0; i < myVar.length; i+3) { 
    //every three 
} 
+4

Cant que acaba de sustituir i = i + 3 para el tercer argumento? ¿O es solo en Java? – CptJesus

+1

Sí, está bien 'i ++' y '++ i' son como' i + = 1' si se usan en la declaración for loop así que 'i + = 3' funcionaría. – elclanrs

+1

Un bucle 'for' no incrementa nada. Su código utilizado en la declaración 'for' hace. Depende de ti cómo/if/where/when deseas modificar 'i' o cualquier otra variable para ese asunto. –

Respuesta

144

Uso del +=assignment operator:

for (var i = 0; i < myVar.length; i += 3) { 

Técnicamente, se puede colocar cualquier expresión desea en la expresión final del bucle, pero que por lo general se utiliza para actualizar la variable de contador.

Para obtener más información acerca de cada paso del bucle for, check out the MDN article.

+0

Gracias por los detalles. Estaba bastante seguro de que había una manera de poner expresiones más avanzadas en el tercer espacio. Acababa de olvidar que necesita definir la variable, por lo que obviamente 'i + 3' no funciona. – brentonstrine

+0

@brentonstrine: No hay problema, me alegro de poder ayudar –

7
for (var i = 0; i < 10; i=i+2) { 
     // code here 
    }​ 
+0

o 'for (var i = 0; i <10; i + = 2)', porque 'i = i + 2' es igual a' i + = 2' – arximughal

7

Un for bucle:

for(INIT; TEST; ADVANCE) { 
    BODY 
} 

significa lo siguiente:

INIT; 
while (true) { 
    if (!TEST) 
     break; 
    BODY; 
    ADVANCE; 
} 

Usted puede escribir casi cualquier expresión para INIT, TEST, ADVANCE y BODY.

tenga en cuenta que los ++ operadores y variantes son los operadores con los efectos secundarios (uno debe tratar de evitarlos si no los está utilizando como i+=1 y similares):

  • ++i significa i+=1; return i
  • i++ significa oldI=i; i+=1; return oldI

Ejemplo:

> i=0 
> [i++, i, ++i, i, i--, i, --i, i] 
[0, 1, 2, 2, 2, 1, 0, 0] 
5

La respuesta de Andrew Whitaker es verdadera, pero puede usar cualquier expresión para cualquier parte.
Solo recuerda que la segunda expresión (del medio) debe evaluar para que se pueda comparar con un booleano true o false.

Cuando uso una for loop, pienso en él como

for (var i = 0; i < 10; ++i) { 
    /* expression */ 
} 

como

var i = 0; 
while(i < 10) { 
    /* expression */ 
    ++i; 
} 
1

Por supuesto que puede. Otros han señalado correctamente que debe hacer i += 3. No puede hacer lo que ha publicado porque todo lo que hace aquí es agregar i + 3 pero nunca volver a asignar el resultado al i. i++ es solo una abreviatura de i = i + 1, del mismo modo i +=3 es una abreviatura de i = i + 3.

0
for (var i = 0; i < myVar.length; i+=3) { 
    //every three 
} 

adicional

Operator Example Same As 
    ++  X ++  x = x + 1 
    --  X --  x = x - 1 
    +=  x += y  x = x + y 
    -=  x -= y  x = x - y 
    *=  x *= y  x = x * y 
    /=  x /= y  x = x/y 
    %=  x %= y  x = x % y 
Cuestiones relacionadas