Déstructuration

La déstructuration (destructuring) extrait des valeurs de tableaux et d’objets directement vers des variables séparées.

Sur cette page

Exemple

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

const podium = ['Emma', 'Lucas', 'Léa']
const [winner, second] = podium

console.log(name, level)
console.log(winner, second)
Console
Léa 3
Emma Lucas

Définition et utilisation

#

La déstructuration est une écriture raccourcie d’affectation. Au lieu de lire user.name puis user.level l’un après l’autre, vous écrivez const { name, level } = user et vous avez immédiatement deux variables. Pour les tableaux, les crochets récupèrent les éléments selon leur position : const [first, second] = list.

Pour les objets, ce qui compte, ce sont les noms de propriétés, pas l’ordre. Vous pouvez renommer la variable ({ name: userName }), donner une valeur par défaut pour le cas undefined ({ level = 1 }), et accéder à des objets imbriqués. L’écriture ...rest rassemble les éléments ou propriétés restants.

La déstructuration fonctionne aussi dans les paramètres de fonction et dans les boucles. Une fonction qui reçoit un objet de réglages déballe immédiatement les champs nécessaires, et for (const [key, value] of Object.entries(obj)) donne un accès pratique aux paires clé-valeur.

Syntaxe

#
Syntaxe
const [a, b] = array
const [first, , third] = array
const [head, ...rest] = array
const { a, b } = object
const { a: newName, b = defaultValue } = object
const { nested: { c } } = object
function fn({ a, b = 1 }) {}

Plus d’exemples

#
Renommage, valeurs par défaut et reste
JavaScript
const settings = { theme: 'dark', sounds: false, fontSize: 18 }

const { theme: mode, language = 'fr', ...others } = settings

console.log(mode, language)
console.log(others)
Console
dark fr
{ sounds: false, fontSize: 18 }
Paramètres de fonction
JavaScript
function createUser({ name, role = 'student', active = true }) {
  return `${name}: ${role}, actif : ${active}`
}

console.log(createUser({ name: 'Lucas' }))
console.log(createUser({ name: 'Emma', role: 'mentor', active: false }))
Console
Lucas: student, actif : true
Emma: mentor, actif : false
Échanger les valeurs de variables
JavaScript
let first = 'HTML'
let second = 'CSS'

;[first, second] = [second, first]

console.log(first, second)
Console
CSS HTML

Le point-virgule au début de la ligne protège contre une fusion avec l’instruction précédente, quand vous écrivez du code sans points-virgules. Une ligne commençant par [ pourrait être considérée comme la suite de la précédente.

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

#
  • Déstructurer null ou undefined lève une TypeError. Pour un argument optionnel, ajoutez une valeur par défaut pour tout le paramètre : function fn({ a } = {}).
  • La valeur par défaut ne fonctionne que pour undefined. Si le champ vaut null, la variable recevra null.
  • N’exagérez pas avec l’imbrication. Trois niveaux d’accolades sur une seule ligne sont difficiles à lire, il est plus clair de déballer les données en deux étapes.

Entrées associées

#

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