Javascript 'Array' y 'Loop' cómo puede "variable " ser una CONDICIÓN

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í:

  1. 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 .

  2. 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>"; }, "");