Aquí en esta secuencia de commands, los automobilees [i] se usan como una condición. ¿Cómo identifica el progtwig si la condición es true
o false
y el progtwig se detiene correctamente después de ingresar a la 4ª variable en la matriz?
Entonces la pregunta es: cómo el progtwig identifica la condición y cómo son los automobilees [i] una condición.
var cars = ["BMW", "Volvo", "Saab", "Ford"]; var i = 0; var text = ""; for (;cars[i];) { text += cars[i] + "<br>"; i++; }
Dos cosas están en juego aquí:
En JavaScript, cuando usa un valor como condición, se lo coacciona para que sea boolean. Los valores 0
, ""
, NaN
, null
e undefined
fuerzan a false
(ellos, más false
, se llaman valores de falsey); todos los demás ("valores verdaderos") coaccionan a la true
.
Si intenta acceder a una input inexistente en una matriz, se vuelve undefined
.
Entonces, cuando alcanzo 4
, los cars[i]
undefined
están undefined
, lo que coacciona a false
, y el ciclo se detiene. Pero depender de eso es probable que sea una trampa, porque si hay inputs en los cars
que forzar a false
(no hay en ese ejemplo, pero …), el ciclo se detendrá antes de procesar toda la matriz.
Nota al margen: for (; condition ;)
es una forma muy extraña de escribir while (condition)
. Si no tiene inicializar, probar y actualizar partes, probablemente no sea la estructura de control que desea. Has dicho que intentas entender este código, así que supongo que no lo escribiste; solo ten en count que la calidad puede no ser tan alta.
Esta es la forma "normal" de escribir ese ciclo:
var cars = ["BMW", "Volvo", "Saab", "Ford"]; var i; var text = ""; for (i = 0; i < cars.length; i++) { text += cars[i] + "<br>"; }
O algo un poco más moderno:
var cars = ["BMW", "Volvo", "Saab", "Ford"]; var text = ""; cars.forEach(function(car) { text += car + "<br>"; });
O algo un poco más avanzado, pero quizás ofensivo para los principiantes:
var cars = ["BMW", "Volvo", "Saab", "Ford"]; var text = cars.networkinguce(function(acc, car) { return acc + car + "<br>"; }, "");