Warning: JavaScript 1.6's for-each-in loops are deprecated

Tradução em progresso.

Mensagem

Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead

Tipo de mensagem

Warning

O que aconteceu de errado?

A declaração for each (variable in obj) do JavaScript 1.6 foi descontinuada e será removida num futuro próximo.

Exemplos

Iteração do objeto

for each...in tem sido usada para iterar por valores específicos do objeto.

Sintaxe descontinuada

var object = { a: 10, b: 20 };

for each (var x in object) {
  console.log(x);        // 10
                         // 20
}

Sintaxe padrão alternativa

Agora você pode utilizar o loop padrão for...in, para iterar sobre chaves específicas do objeto e receber cada valor para dentro do loop:

var object = { a: 10, b: 20 };

for (var key in object) {
  var x = object[key];
  console.log(x);        // 10
                         // 20
}

Ou, utilizando for...of (ES2015) e Object.values (ES2017), você pode ter um array dos valores específicos do objeto e iterar sobre o array da seguinte maneira:

var object = { a: 10, b: 20 };

for (var x of Object.values(object)) {
  console.log(x);        // 10
                         // 20
}

Iteração sobre o Array

for each...in tem sido usado para iterar sobre elementos específicos do array.

Sintaxe descontinuada

var array = [10, 20, 30];

for each (var x in array) {
  console.log(x);        // 10
                         // 20
                         // 30
}

Sintaxe padrão alternativa

Isso agora é possível também com loops for...of (ES2015).

var array = [10, 20, 30];

for (var x of array) {
  console.log(x);        // 10
                         // 20
                         // 30
}

Iterando sobre um array null-able

for each...in não faz nada se o valor especificado for null ou undefined, mas for...of vai disparar uma exceção nestes casos.

Sintaxe descontinuada

function func(array) {
  for each (var x in array) {
    console.log(x);
  }
}
func([10, 20]);        // 10
                       // 20
func(null);            // prints nothing
func(undefined);       // prints nothing

Sintaxe padrão alternativa

Para reescrever as declarações for each...in de modo que os valores possam ser null ou undefined com for...of também, você precisa utilizar algo como for...of.

function func(array) {
  if (array) {
    for (var x of array) {
      console.log(x);
    }
  }
}
func([10, 20]);        // 10
                       // 20
func(null);            // prints nothing
func(undefined);       // prints nothing

Iterating over an object's key-value pair

Deprecated syntax

There's a deprecated idiom to iterate over the specified object's key-value pairs using for each...in and the deprecated Iterator object.

var object = { a: 10, b: 20 };

for each (var [key, value] in Iterator(object)) {
  console.log(key, value);  // "a", 10
                            // "b", 20
}

Alternative standard syntax

You can now use the standard for...in loop to iterate over specified object keys, and get each value inside the loop:

var object = { a: 10, b: 20 };

for (var key in object) {
  var value = object[key];
  console.log(key, value);  // "a", 10
                            // "b", 20
}

Or, using for...of (ES2015) and Object.entries (ES2017), you can get an array of the specified object values and iterate over the array like this:

var object = { a: 10, b: 20 };

for (var [key, value] of Object.entries(object)) {
  console.log(key, value);  // "a", 10
                            // "b", 20
}

See also

Etiquetas do documento e colaboradores

 Colaboradores desta página: thiagosaife
 Última atualização por: thiagosaife,