Dans la plupart des bases de code modernes, const représente la grande majorité des déclarations. Ce n'est pas un tic de style, c'est le réglage par défaut recommandé par tous les guides sérieux.
Il porte pourtant un nom trompeur. const ne crée pas une constante au sens mathématique, et ce malentendu est la première chose à lever.
Définition
const déclare un nom lié à une valeur, et interdit de rattacher ce nom à une autre valeur par la suite. La portée est celle du bloc, exactement comme let, et la valeur doit être fournie sur la ligne de déclaration.
const TVA = 0.2;
const prixTTC = (ht) => ht * (1 + TVA);
console.log(prixTTC(100)); // 120
TVA = 0.1; // TypeError: Assignment to constant variable.La tentative de réaffectation échoue à l'exécution, avec un message sans ambiguïté. C'est un garde-fou bon marché : il attrape la modification accidentelle d'une valeur qui n'était pas censée bouger, souvent à des centaines de lignes de sa déclaration.
Ce que const ne protège pas
Le blocage porte sur la liaison, pas sur le contenu. Quand la valeur est un Object (objet) ou un Array (tableau), le nom reste attaché au même objet, mais l'objet, lui, peut changer autant qu'il veut.
const panier = { total: 0 };
panier.total = 49; // autorisé : l'objet change, pas la liaison
console.log(panier.total); // 49
panier = { total: 0 }; // TypeError : la liaison, elle, est figéeC'est le point qui surprend le plus souvent, et il est logique une fois la distinction posée : la variable ne contient pas l'objet, elle contient une référence vers lui. const gèle la référence.
Pour empêcher aussi les modifications du contenu, Object.freeze() existe, mais il ne fige que le premier niveau : un objet imbriqué reste modifiable. Dans un module ES, toujours en mode strict, écrire dans un objet gelé lève une erreur ; ailleurs, l'affectation est ignorée en silence.
const, let ou var
| Mot-clé | Portée | Redéclaration | Réaffectation |
|---|---|---|---|
const | Le bloc | Refusée | Refusée |
let | Le bloc | Refusée | Autorisée |
var | La fonction | Autorisée | Autorisée |
La marche à suivre tient en deux lignes : écrire const partout, et le remplacer par let le jour où le moteur refuse une réaffectation dont on a réellement besoin. var n'entre plus dans le choix.
Questions fréquentes
const rend-il une valeur immuable ?
Non, et c'est la confusion la plus fréquente. Un tableau déclaré en const accepte parfaitement un ajout ou un tri en place. Seul le lien entre le nom et la valeur est verrouillé, ce qui est déjà une garantie utile mais bien plus faible que l'immuabilité.
Peut-on utiliser const dans une boucle ?
Dans une boucle for...of, oui, et c'est même la forme recommandée : chaque tour crée une nouvelle liaison, qui n'a aucune raison de changer pendant le tour. Dans une boucle à compteur classique, non, puisque le compteur est incrémenté à chaque passage.
const est-il plus rapide que let ?
Pas de façon mesurable dans du code réel : les moteurs modernes optimisent les deux de la même manière. Le gain est ailleurs, dans la lecture. Un fichier où seules trois lignes portent let annonce en un coup d'œil les trois seuls endroits où quelque chose bouge. Notre formation JavaScript part de ces réflexes de déclaration pour construire des bases de code qui restent lisibles à plusieurs milliers de lignes.