for...in

Parcourt les noms des propriétés énumérables d’un objet, y compris celles héritées du prototype.

Sur cette page

Exemple

#
JavaScript
const student = { name: 'Léa', level: 3, course: 'JavaScript' }

for (const key in student) {
  console.log(`${key}: ${student[key]}`)
}
Console
name: Léa
level: 3
course: JavaScript

Définition et utilisation

#

La boucle for...in fournit à chaque tour la clé suivante de l’objet sous forme de chaîne. Vous lisez la valeur avec les crochets : object[key]. C’est la plus ancienne façon de parcourir les propriétés des objets ordinaires.

La boucle couvre aussi les propriétés énumérables héritées du prototype. Dans les littéraux d’objets ordinaires, cela dérange rarement, mais avec des objets créés par Object.create(), des clés supplémentaires apparaîtront. Vous les filtrez avec la condition Object.hasOwn(object, key).

for...in ne convient pas aux tableaux : il renvoie les indices comme des chaînes ("0", "1") et peut capturer des propriétés supplémentaires. Dans le code moderne, on utilise plus souvent Object.keys() ou Object.entries() avec for...of, car ils ne renvoient que les clés propres.

Syntaxe

#
Syntaxe
for (const key in object) {
  // instructions
}

Plus d’exemples

#
Clés héritées et Object.hasOwn()
JavaScript
const defaults = { theme: 'dark' }
const settings = Object.create(defaults)
settings.sounds = true

for (const key in settings) {
  console.log(key, Object.hasOwn(settings, key))
}
Console
sounds true
theme false
Piège : for...in sur un tableau
JavaScript
const points = [10, 20, 30]

for (const index in points) {
  console.log(index + 1)
}
Console
01
11
21

Les indices sont des chaînes, donc + 1 concatène du texte au lieu d’additionner. Pour les tableaux, utilisez for...of ou forEach().

Ordre des clés
JavaScript
const lessons = { b: 'CSS', 2: 'Boucles', a: 'HTML', 1: 'Variables' }

for (const key in lessons) {
  console.log(key)
}
Console
1
2
b
a

Les clés qui ressemblent à des entiers viennent d’abord, par ordre croissant. Les autres gardent leur ordre d’ajout.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Si vous n’avez besoin que des clés propres, il est plus simple d’écrire for (const key of Object.keys(obj)). Il n’est alors pas nécessaire de vérifier Object.hasOwn().
  • N’ajoutez ni ne supprimez de propriétés pendant une boucle for...in. Il n’y a aucune garantie que les nouvelles clés seront visitées.
  • Les clés de type Symbol et les propriétés non énumérables sont ignorées.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.