Apprends à extraire des valeurs de tableaux et des propriétés d'objets dans des variables distinctes en utilisant l'affectation par destructuration.
La destructuration te permet d'extraire des valeurs de tableaux (ou des propriétés d'objets) dans des variables individuelles en une seule instruction.
Destructuration de tableau basique :
const [a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2Sauter des valeurs — utilise des virgules sans nom de variable :
const [, second, , fourth] = [10, 20, 30, 40];
console.log(second); // 20
console.log(fourth); // 40Valeurs par défaut — fournis des valeurs de secours pour les éléments manquants :
const [a = 0, b = 0, c = 0] = [1, 2];
console.log(c); // 0 (valeur par défaut, car le tableau n'a pas de troisième élément)Élément rest — collecte les éléments restants dans un nouveau tableau :
const [first, ...rest] = [1, 2, 3, 4, 5];
console.log(first); // 1
console.log(rest); // [2, 3, 4, 5]Échanger des variables — une astuce classique :
let x = 1;
let y = 2;
[x, y] = [y, x];
console.log(x); // 2
console.log(y); // 1La destructuration d'objet extrait les propriétés par leur nom :
const person = { name: 'Alice', age: 30, city: 'Paris' };
const { name, age } = person;
console.log(name); // 'Alice'
console.log(age); // 30Renommer des variables — utilise un deux-points pour assigner à un nom de variable différent :
const { name: fullName, age: years } = person;
console.log(fullName); // 'Alice'
console.log(years); // 30Valeurs par défaut :
const { name, role = 'user' } = { name: 'Bob' };
console.log(role); // 'user' (valeur par défaut, car role n'est pas dans l'objet)Destructuration imbriquée — extrait depuis des objets imbriqués :
const user = {
name: 'Alice',
address: {
city: 'Paris',
country: 'France'
}
};
const { address: { city, country } } = user;
console.log(city); // 'Paris'
console.log(country); // 'France'Tu peux combiner renommage, valeurs par défaut et imbrication selon tes besoins.
L'une des utilisations les plus puissantes de la destructuration se trouve dans les paramètres de fonction. Au lieu d'accepter un objet et d'accéder à ses propriétés dans le corps de la fonction, tu peux destructurer directement dans la liste des paramètres.
Sans destructuration :
function greet(person) {
console.log('Hello, ' + person.name + '! Age: ' + person.age);
}Avec destructuration :
function greet({ name, age }) {
console.log('Hello, ' + name + '! Age: ' + age);
}
greet({ name: 'Alice', age: 30 }); // Hello, Alice! Age: 30Avec valeurs par défaut :
function createUser({ name = 'Anonymous', role = 'user' } = {}) {
return { name, role };
}
createUser({ name: 'Bob' }); // { name: 'Bob', role: 'user' }
createUser(); // { name: 'Anonymous', role: 'user' }Le = {} à la fin fournit un objet vide par défaut pour que la fonction puisse être appelée sans aucun argument.
Ce pattern est extrêmement courant en JavaScript moderne, surtout pour les fonctions qui acceptent des objets de configuration avec de nombreuses propriétés optionnelles. Cela rend la signature de la fonction auto-documentée.
<div id="output"></div>
<script>
// Array destructuring
const colors = ['red', 'green', 'blue', 'yellow'];
const [primary, secondary, ...others] = colors;
// Object destructuring
const book = {
title: 'JavaScript Guide',
author: 'MDN',
year: 2024,
tags: ['programming', 'web']
};
const { title, author, year, tags: [firstTag] } = book;
// Function parameter destructuring
const describe = ({ title, author }) => `${title} by ${author}`;
const output = document.getElementById('output');
output.innerHTML = `
<p>Primary: ${primary}, Secondary: ${secondary}</p>
<p>Others: [${others}]</p>
<p>Book: ${title} (${year})</p>
<p>Author: ${author}</p>
<p>First tag: ${firstTag}</p>
<p>Description: ${describe(book)}</p>
`;
</script>Que contient `a` après `const { x: a } = { x: 10 }` ?