El bucle for-of es un nuevo tipo de bucle introducido en ES6. Este bucle lo que nos permite es iterar a través de los elementos de objetos iterables como, por ejemplo, String, Array, Set, Map, etc.
La estructura que tiene es:
1 2 3 |
for (value of iterable_obj) { ... } |
Vamos a ver unos ejemplos con algunos de los tipos de objetos que hemos comentado antes que permite iterar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// ARRAY const array = [1, 2, 'a']; for (let value of array) { console.log(value); } // Resultado: // 1 // 2 // a // STRING const string = 'string'; for (let value of string) { console.log(value); } // Resultado: // s // t // r // i // n // g // ARGUMENTS function testFunction() { for (let value of arguments) { console.log(value); } } testFunction(1, 2, 'a', [string]); // Resultado: // 1 // 2 // a // [ 'string' ] |
Ver código anterior en vivo: https://repl.it/@vreaxe/ES6-for-of-loop
Diferencias entre for-of y for-in
Una de las diferencias es que for-of solamente puede iterar en objetos iterables, en cambio, for-in puede iterar en cualquier tipo de objeto. Otra diferencia, es que for-in devuelve las claves y for-of los valores.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
const array = [3, 4, 5, 'string']; const obj = { name: 'John', age: 20 }; // ARRAY for (value of array) { console.log(value); } // Resultado: // 3 // 4 // 5 // string for (key in array) { console.log(key); } // Resultado: // 0 // 1 // 2 // 3 // OBJETO for (key in obj) { console.log(key); } // Resultado: // name // age for (value of obj) { console.log(value); } // Resultado: // TypeError: obj[Symbol.iterator] is not a function |
Ver código anterior en vivo: https://repl.it/@vreaxe/ES6-for-of-vs-for-in
Diferencias entre for-of y .forEach
La principal diferencia es que for-of puede iterar en cualquier tipo de objeto iterable, en cambio, .forEach solamente puede en arrays. Otra diferencia es que con .forEach podemos acceder al índice y con for-of no.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
const array = [3, 4, 5, 'string']; const string = 'string'; // ARRAY for (value of array) { console.log(value); } // Resultado: // 3 // 4 // 5 // string array.forEach(function(value, index) { // podemos acceder al índice console.log(value, index); }); // Resultado: // 3 0 // 4 1 // 5 2 // STRING for (value of string) { console.log(value); } // Resultado: // s // t // r // i // n // g string.forEach(function(value, index) { console.log(value, index); }); // Resultado: // TypeError: string.forEach is not a function |
Ver código anterior en vivo: https://repl.it/@vreaxe/ES6-for-of-vs-forEach
-