En JavaScript los bucles (loops) son utilizados para realizar tareas repetitivas con base en una condición. Las condiciones típicamente devuelven true
(verdadero) o false
(falso) al ser evaluados. El bucle continuará ejecutándose hasta que la condición devuelva false
.
Los tres tipos más comunes de bucles son:
- for
- while
- do while
Puedes escribir js for
, js while
o js do while
para obtener más información acerca de cualquiera de estos bucles. Démosles ahora un vistazo más detallado y también veamos algunas variaciones:
for loop
Sintaxis
for ([initializacion]); [condicion]; [expresion-final]) {
// sentencias
}
La sentencia for
en javascript consiste de tres expresiones y una declaración:
Descripción
- inicialización - Sucede antes de la primera ejecución del bucle. Esta expresión es comúnmente utilizada para crear contadores. Las variables creadas tienen un alcance (scope) limitado al cuerpo del bucle. Una vez que el bucle ha terminado su ejecución las variables son destruidas.
- condición - Expresión que es evaluada antes de la ejecución de cada iteración. Si se omite, esta expresión es evaluada como verdadera. Si devuelve
true
, la sentencia del cuerpo del bucle se ejecuta. Si devuelvefalse
, el bucle se detiene. - expresión-final - Expresión que se ejecuta luego de cada iteración. Usualmente es utilizada para incrementar un contador. Pero también puede ser utilizada para decrementar el contador.
- sentencia o declaración - Código que será ejecutado repetidamente por el bucle.
Cualquiera de estas tres expresiones o la sentencia del cuerpo del bucle pueden ser omitidas. Los bucles For
son comúnmente utilizados para contar un cierto número de iteraciones para repetir una sentencia. Puedes utilizar una sentencia break
para salir del bucle antes que la expresión de condición devuelva false
.
Complicaciones comunes
Exceder los límites del array.
Cuando recorremos un array utilizando los índices es fácil exceder los límites (ej. intentar referenciar el 4º elemento de un array de 3 elementos).
// Esto ocasionará un error.
// Los límites del array serán excedidos.
var arr = [ 1, 2, 3 ];
for (var i = 0; i <= arr.length; i++) {
console.log(arr[i]);
}
resultado:
1
2
3
undefined
Hay dos maneras de arreglar este código. Que la condición sea i < arr.length
o i <= arr.length - 1
.
Ejemplos
Iterar a través de los enteros del 0-8
for (var i = 0; i < 9; i++) {
console.log(i);
}
resultado:
0
1
2
3
4
5
6
7
8
Sal de un bucle antes que la condición evalúe a false
for (var elefante = 1; elefante < 10; elefante+=2) {
if (elefante === 7) {
break;
}
console.info('elefante es ' + elefante);
}
resultado:
elefante es 1
elefante es 3
elefante es 5
for...in loop
La declaración for...in
itera sobre las propiedades enumerables de un objeto, en orden arbitrario. Para cada propiedad distinta, se pueden ejecutar sentencias.
for (variable in object) {
...
}
Descripción
variable: Un nombre distinto es asignado a la variable
en cada iteración.
objeto: Objeto cuyas propiedades enumerables (no de tipo symbol
) son iteradas.
Ejemplos
// Inicializar objecto.
a = { "a": "Athens", "b": "Belgrade", "c": "Cairo" }
// Iterar sobre las propiedades.
var s = ""
for (var key in a) {
s += key + ": " + a[key];
s += "<br />";
}
document.write (s);
// Resultado:
// a: Athens
// b: Belgrade
// c: Cairo
// Inicializar el array (arreglo).
var arr = new Array("cero", "uno", "dos");
// Agregar algunas propiedades expando al array.
arr["naranja"] = "fruta";
arr["zanahoria"] = "vegetal";
// Iterar sobre las propiedades y elementos.
var s = "";
for (var key in arr) {
s += key + ": " + arr[key];
s += "<br />";
}
document.write (s);
// Output:
// 0: cero
// 1: uno
// 2: dos
// naranja: fruta
// zanahoria: vegetal
// Forma eficiente de obtener los índices (keys) de un objeto usando la expresión dentro de las condiciones del bucle for-in
var myObj = {a: 1, b: 2, c:3}, myKeys = [], i=0;
for (myKeys[i++] in myObj);
document.write(myKeys);
//Resultado:
// a
// b
// c
for...of loop
La declaración for...of
crea un bucle que itera a través de objetos iterables (incluyendo Array, Map, Set, el objeto Argumentos y así sucesivamente), invocando un hook (función) de iteración con sentencias a ejecutar para el valor de cada propiedad distinta.
for (variable of object) {
statement
}
Descripción
variable: En cada iteración se asigna un valor de una propiedad distinta a la variable.
objeto: Objeto cuyas propiedades son iteradas.
Ejemplos
Array
let arr = [ "fred", "tom", "bob" ];
for (let i of arr) {
console.log(i);
}
// Resultado:
// fred
// tom
// bob
Map
var m = new Map();
m.set(1, "negro");
m.set(2, "rojo");
for (var n of m) {
console.log(n);
}
// Resultado:
// 1,negro
// 2,rojo
Set
var s = new Set();
s.add(1);
s.add("rojo");
for (var n of s) {
console.log(n);
}
// Resultado:
// 1
// rojo
Arguments object
// tu navegador debe tener soporte para el for..of loop
// y variables con alcance-let (let-scoped) en bucles for
function mostrarObjetoArguments() {
for (let n of arguments) {
console.log(n);
}
}
mostrarObjetoArguments(1, 'rojo');
// resultado:
// 1
// rojo
while loop
El bucle while empieza por evaluar la condición. Si la condición es verdadera (devuelve true
), entonces las sentencias son ejecutadas. Si la condición es falsa (devuelve false
), entonces las sentencias no son ejecutadas. Luego el bucle finaliza.
Aquí la sintaxis del bucle while:
Sintaxis:
while (condicion)
{
sentencia(s);
}
sentencia(s): Una sentencia es código que se ejecuta si la condición devuelve verdadero ( true
).
condición: Es una expresión booleana (Boolean) que es evaluada antes de cada paso (iteración) por el bucle. Si esta condición evalúa a verdadero ( true
), las sentencias son ejecutadas. Cuando la condición evalúa a falso ( false
), la ejecución continúa con la siguiente sentencia luego del bucle while.
Ejemplo:
var i = 1;
while (i < 10)
{
console.log(i);
i++; // i=i+1 esto sería lo mismo
}
Resultado:
1
2
3
4
5
6
7
8
9
Como iterar usando bucles en JavaScript
Los bucles while se ejecutan mientras que la condición dentro de los ( ) devuelve verdadero ( true
). Ejemplo:
while(condicion){
codigo...
}
Pista 1:
Usa una variable de iteración como la variable i en la condición de tu bucle.
var i = 0;
while(i <= 4){
}
Spoiler Alert aquí la solución!
Solución:
// Preparación
var miArray = [];
// Sólo modifica el código bajo esta línea.
var i = 0;
while (i <= 4){
miArray.push(i);
i++;
}
Do...while loop
El bucle do...while
está cercanamente relacionado al bucle while
. En el bucle do...while
, la condición se evalúa al final.
Aquí la sintaxis para el bucle do...while
:
Sintaxis:
do {
*Sentencias;*
} while (*condicion*);
sentencia(s): Una sentencia es ejecutada por lo menos una vez antes de que la condición o expresión booleana sea evaluada y es re-ejecutada cada vez que la condición devuelve true
.
condición: Aquí la condición es una expresión booleana. Si la expresión booleana evalúa a true
, las sentencias son ejecutadas de nuevo. Cuando la expresión booleana devuelve false
, el bucle finaliza.
Ejemplo:
var i = 0;
do {
i = i + 1;
console.log(i);
} while (i < 5);
Resultado:
1
2
3
4
5
Como iterar con bucles Do...While en Javascript.
- Los bucles
Do...While
aseguran que el código se ejecute por lo menos una vez, y luego de esta primera ejecución, si la condición dentro delwhile()
es true, continúa con el bucle, de otra forma, se detiene.
Solución:
var miArray = [];
var i = 10;
do {
miArray.push(i);
i++;
} while(i <= 10);
Traducido del artículo JavaScript Loops Explained: For Loop, While Loop, Do...while Loop, and More