No entiendo como funciona este bucle en javascript. ¿alguien puede explicarlo ?
!- Categoría: Otras aplicaciones
Estoy siguiendo un tutorial de animación de objetos en javascript, pero me quedé atascado en la comprensión de un bucle que está implementado en dicho código. El bucle en cuestión es este:
for (var i=0;efectos[i];i++){
// acciones
}
siendo efectos un array de objetos como el que sigue:
[
{‘inicio’:0,‘fin’:350,‘u’:‘px’,‘propCSS’:‘width’},
{‘inicio’:0,‘fin’:350,‘u’:‘px’,‘propCSS’:‘height’} ,
{‘inicio’:0,‘fin’:1,‘u’:’‘,‘propCSS’:‘opacity’}
]
¿Alguien puede explicarme que significa, dentro de la cabecera del bucle for, efectos[i] ? No debe ser esta la condición de parada ? En cuyo caso, ¿cómo puede ser la condición de parada dependiente de una variable i que se va modificando en el transcurso del bucle for? ¿No implicaría esto que el bucle nunca pararía ?
Para quien le interese, el tutorial de animación que estoy siguiendo, y que parece bastante bueno, es el siguiente:
http://www.disegnocentell.com.ar/notas2.php?id=239
Gracias de antemano, espero vuestras opiniones y respuestas.
Ordenar por: Más útiles | Recientes | Cronológico
4 Respuestas
-
!
Karma: 25 (1 voto)
Para que el bucle for finalice debe haber una condición de falsedad en el segundo parámetro. El “false” y el “0” son tomados como lo mismo en gran parte del códio javaScript, por lo que lo más probable es que esa condición (efectos[i]) signifique que en algún punto el vector efectos tiene un 0 que detendrá la ejecución del for.
Otra posibilidad es que esté pensado para recorrer el vector, y al llegar a un valor offset (fuera de lo definido por el vector) el for se detenga. Más claro: Digamos que “efectos” es de longitud 5, si hacemos llamada a la posición 5 (recordá que arranca de 0, por lo que 4 es el último valor), el valor devuelto es null/false, por lo que es un valor que detendría el for.Espero que te sirva la ayuda. Un saludo!
-
!
Karma: 25 (1 voto)
Estoy de acuerdo con Lucas, es la explicación más convincente. En cuanto efectos[i] sea 0, o “false”, el bucle se para. De todas formas, puedes preguntar este tipo de preguntas en GenbetaDev o en StackOverflow (en inglés), que están especializados en programación.
-
!
Karma: 10 (0 votos)
En vez de usar la propiedad length del array, usa que cuando no hay elemento, porque se ha salido del array, el operador devolverá null y como null a veces se puede equiparar a false.
Vamos que hace un recorrido… No soy experto en javascript pero tiene toda la pinta de ser un abuso del lenguaje, en vez de usar la propiedad length del array, que sería lo ortodoxo, usar el truco. Todo puede ser que en otra especificación de javascript no se interprete igual y pete.
-
!
Karma: 5 (0 votos)
Por aclarar un poco más la cosa:
- en Javascript cuando se accede a una posición (en realidad una key) de una matriz que no existe, se devuelve el valor undefined – este valor se evalúa como false en una condición (de un for, if, while,...) – por ello cuando i llegue al valor 3, efectos[i] devolverá undefined, con lo que se termina el bucle – en cuanto a lo de usar length como comenta Juan: como estamos hablando de animaciones donde es importante la velocidad, acceder a esa propiedad en cada recorrido del bucle, sería más lento. Una opción intermedia, y a lo mejor más rápida luego, sería algo como esto:
var longitud=efectos.length;
for (var i=0;i// acciones
} -
!
Ha salido mal el código, Sería:
var longitud=efectos.length;
for (var i=0;i<longitud;i++){
// acciones
} -
!
Bueno, lo de asignar la propiedad a una variable intermedia siempre se suele hacer, menos en algunos lenguajes compilados que usan métodos inline y viene a ser lo mismo, hacerlo que no. Pero sí, está bien que lo puntualices. :)
De hecho, imagino debe ser más rápido con la variable que no usando el valor undefined, porque supongo que tendrá que lanzar una excepción, capturarla y retornar ese valor, en cambio la consulta a la propiedad accede a una variable interna y la devuelve.