[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Statements/for...in [Back]  [Original]

for...in - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

for...in

Baseline Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

L'instruction for...in permet d'itrer sur les proprits numrables d'un objet qui ne sont pas des symboles. Pour chaque proprit obtenue, on excute une instruction (ou plusieurs grce un bloc d'instructions).

Dans cet article

Exemple interactif

const object = { a: 1, b: 2, c: 3 };

for (const property in object) {
  console.log(`${property}: ${object[property]}`);
}

// Expected output:
// "a: 1"
// "b: 2"
// "c: 3"

Syntaxe

js
for (variable in objet) {
  instructions;
}
variable

Un nom de proprit diffrent est assign la variable chaque itration de la boucle.

objet

L'objet dont les proprits numrables et qui ne sont pas des symboles sont parcourues par la boucle.

Description

Une boucle for...in ne parcourt que les proprits numrables et qui ne sont pas des symboles. Les objets qui ont t crs par des constructeurs intgrs comme Array et Object ont hrit de proprits non numrables de Object.prototype et String.prototype comme les mthodes indexOf() du type String ou toString() depuis Object. La boucle parcourera toutes les proprits numrables de l'objet et aussi celles dont il hrite du prototype du constructeur (les proprits les plus proches de l'objet dans la chane des prototypes primeront sur les proprits des prototypes).

Les proprits ajoutes, modifies ou supprimes

Une boucle for...in parcourt les proprits d'un objet dans un ordre arbitraire (voir l'oprateur delete pour plus d'explications quant l'impossibilit de se fier un tel ordre, au moins dans le cas o on souhaite grer plusieurs navigateurs).

Si une proprit est modifie dans une des itrations de la boucle et que la boucle itre ensuite sur cette proprit, sa valeur sera celle qui a t modifie. Une proprit qui a t supprime avant que la boucle n'itre sur celle-l ne sera pas dans la boucle. Les proprits qui ont t ajoutes l'objet pendant la boucle peuvent tre ou ne pas tre pris en compte.

Une bonne pratique consiste ne pas ajouter, modifier ou supprimer une proprit d'un objet lors d'une itration qui ne concerne pas cette proprit. Il n'y a aucune certitude concernant la prise en compte d'une proprit ajoute lors d'une telle boucle et il en va de mme pour savoir si on a visit une proprit avant ou aprs qu'elle ait t modifie ou de savoir si une itration de la boucle concernera une proprit avant que celle-ci soit supprime.

Utiliser for...in et parcourir un tableau

Note : for...in ne doit pas tre utilise pour parcourir un Array lorsque l'ordre des lments est important.

Les lments des indices d'un tableau sont des proprits numrables dont les noms sont des entiers, except cela, elles sont en tout point identiques aux proprits des objets en gnral. Ici aussi, il n'y a aucune certitude que for...in renvoie les indices dans un ordre particulier. Cette instruction listera galement les proprits numrables dont les noms ne sont pas des entiers et celles qui sont hrites.

L'ordre dans lequel le parcours est effectu dpend de l'implmentation. Dans le cas d'un parcours de tableau utilisant for...in, on pourrait trs bien avoir un ordre qui ne soit pas le mme entre les diffrents environnements. Pour cette raison, il est prfrable d'utiliser une boucle for utilisant un compteur numrique (ou Array.forEach() ou encore for...of) lorsqu'on souhaite parcourir des tableaux dans un ordre bien dfini.

Itrer uniquement sur les proprits non hrites

Si on souhaite ne parcourir que les proprits propres d'un objet et pas celles rattaches ses prototypes, on peut utiliser la mthode Object.getOwnPropertyNames() ou bien effectuer un test grce la mthode Object.prototype.hasOwnProperty() voire avec Object.prototype.propertyIsEnumerable()

Exemples

La boucle for...in qui suit utilise parcourt l'objet obj et ses proprits numrables qui ne sont pas des symboles en fournissant la chane de caractres qui dcrit le nom de la proprit et sa valeur.

js
var obj = { a: 1, b: 2, c: 3 };

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

// Affiche dans la console :
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"

La fonction qui suit utilise hasOwnProperty() pour ne pas afficher les proprits hrites :

js
var triangle = { a: 1, b: 2, c: 3 };

function TriangleCouleur() {
  this.couleur = "rouge";
}

TriangleCouleur.prototype = triangle;

var obj = new TriangleCouleur();

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

// Affichera dans la console :
// "obj.couleur = rouge"

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-for-in-and-for-of-statements

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page