JavaScript for...in VS for...of bucle

Mehvish Ashiq 12 octubre 2023
  1. Usando el bucle for..in en JavaScript
  2. Usando el bucle for..of en JavaScript
JavaScript for...in VS for...of bucle

Este artículo compara el bucle for..in y for..of en JavaScript. Identifica la diferencia entre ellos y muestra dónde podemos usarlos.

for..in recorre las propiedades de un objeto. Devuelve una clave en cada iteración que se puede usar para obtener el valor de esa clave en particular. El for..of crea un bucle sobre los valores de un objeto iterable que incluye Map, Array, Set, String y TypedArray integrados.

Ambos tienen una variable y un iterable. Para ambos, la variable puede ser const, let o var. En for..of, el iterable es un objeto cuyas propiedades iterables se iteran mientras que el iterable de for..in es un objeto en sí mismo.

Usando el bucle for..in en JavaScript

const person = {
  firstname: 'Delft',
  lastname: 'Stack',
  age: 30,
  email: 'Delft.Stack@gmail.com'
};

for (const prop in person) console.log(`${prop}: ${person[prop]}`)

Producción :

"firstname: Delft"
"lastname: Stack"
"age: 30"
"email: Delft.Stack@gmail.com"

En el código anterior, for..in está recorriendo las propiedades de un objeto llamado person. Practiquemos el uso de for..in mediante la iteración de sus propiedades.

Vea el código de ejemplo a continuación.

const person = {
  firstname: 'Delft',
  lastname: 'Stack',
  age: 30,
  email: 'Delft.Stack@gmail.com'
};

function email() {
  this.email = 'maofficial@gmail.com';
}

email.prototype = person;
var obj = new email();

for (const prop in obj) {
  if (obj.hasOwnProperty(prop)) {
    console.log(`obj.${prop} = ${obj[prop]}`);
  }
}

Producción :

obj.email = maofficial@gmail.com

El código anterior usa el bucle for..in para verificar si el objeto tiene una propiedad particular como propia o no usando .hasOwnProperty(). El .hasOwnProperty() devuelve true si la propiedad especificada es realmente su propia propiedad.

Usando el bucle for..of en JavaScript

Empecemos a practicar el bucle for..of con un array.

const array = ['apple', 'banana', 'orange'];

for (const value of array) {
  console.log(value);
}

Producción :

apple
banana
orange

En el siguiente código, el iterable es una cadena.

const name = 'Delft';

for (const value of name) {
  console.log(value);
}

Producción :

M
e
h
v
i
s
h

La siguiente instancia de código presenta el uso de for..of con Map.

const personMap =
    new Map([['firstname', 'Delft'], ['lastname', 'Stack'], ['age', 30]]);

for (const entry of personMap) {
  console.log(entry);
}

Producción :

[ 'firstname', 'Delft' ]
[ 'lastname', 'Stack' ]
[ 'age', 30 ]

Practiquemos el for..of usando un objeto que implementa explícitamente el protocolo iterable.

const userDefinedfunctions = {
  [Symbol.iterator]() {
    return {
      num: 0,
      next() {
        if (this.num < 10) {
          return {value: this.num++, done: false};
        }
        return {value: undefined, done: true};
      }
    };
  }
};

for (const value of userDefinedfunctions) console.log(value);

Producción :

0
1
2
3
4
5
6
7
8
9

Symbol.iterator se utiliza como iterador predeterminado para el objeto. Este símbolo es usado por el bucle for-of donde tenemos el iterable cuyas propiedades iterables son iteradas.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - JavaScript Loop