Message
Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead
Type d'erreur
Avertissement.
Quel est le problème ?
L'instruction for each (variable in obj)
présente à partir de JavaScript 1.6 est une instruction dépréciée et est amenée à disparaître dans un avenir proche.
Exemples
Itérer sur un objet
for each...in
pouvait être utilisé pour parcourir les valeurs contenues dans un objet.
Syntaxe dépréciée
var objet = { a: 10, b: 20 }; for each (var x in objet) { console.log(x); // 10 // 20 }
Syntaxe alternative, standard
On peut désormais utilisé l'instruction de boucle standard for...in
afin d'itérer sur les clés d'un objet et de récupérer les valeurs des propriétés :
var objet = { a: 10, b: 20 }; for (var key in objet) { var x = objet[key]; console.log(x); // 10 // 20 }
Ou alors, on peut utiliser for...of
(ES2015) et Object.values
(ES2017) afin d'obtenir un tableau des valeurs associées à un objet pour ensuite le parcourir :
var objet = { a: 10, b: 20 }; for (var x of Object.values(objet)) { console.log(x); // 10 // 20 }
Itérer sur un tableau
for each...in
pouvait être utilisée afin de parcourir les éléments d'un tableau.
Syntaxe dépréciée
var array = [10, 20, 30]; for each (var x in array) { console.log(x); // 10 // 20 // 30 }
Syntaxe alternative, standard
On peut obtenir le même effet avec les boucles for...of
(ES2015).
var array = [10, 20, 30]; for (var x of array) { console.log(x); // 10 // 20 // 30 }
Parcourir un tableau qui vaille null
ou undefined
for each...in
ne fera rien si la valeur fournie est null
ou undefined
. En revanche, for...of
lèvera une exception dans ces cas.
Syntaxe dépréciée
function func(array) { for each (var x in array) { console.log(x); } } func([10, 20]); // 10 // 20 func(null); // rien ne s'affiche func(undefined); // rien ne s'affiche
Syntaxe alternative, standard
Pour réécrire les instructions for each...in
afin que les valeurs null
ou undefined
puissent être gérées avec for...of
, il faudra rajouter une protection :
function func(array) { if (array) { for (var x of array) { console.log(x); } } } func([10, 20]); // 10 // 20 func(null); // rien ne s'affiche func(undefined); // rien ne s'affiche
Itérer sur les tuples clé-valeur d'un objet
Syntaxe dépréciée
On pouvait utiliser une forme syntaxique particulière, désormais dépréciée, qui combine for each...in
et l'objet déprécié Iterator
.
var object = { a: 10, b: 20 }; for each (var [key, value] in Iterator(object)) { console.log(key, value); // "a", 10 // "b", 20 }
Syntaxe alternative, standard
On peut désormais utiliser la boucle for...in
afin de parcourir les différentes clés d'un objet pour ensuite récupérer les valeurs associées :
var object = { a: 10, b: 20 }; for (var key in object) { var value = object[key]; console.log(key, value); // "a", 10 // "b", 20 }
Ou encore, on peut utiliser {jsxref("Instructions/for...of", "for...of")}} (ES2015) et Object.entries
(ES2017) pour récupérer un tableau contenant les clés et les valeurs d'un objet qu'on pourra ensuite parcourir :
var object = { a: 10, b: 20 }; for (var [key, value] of Object.entries(object)) { console.log(key, value); // "a", 10 // "b", 20 }