const en JavaScript : la déclaration par défaut, et ce qu'elle ne protège pas

const fige le lien entre un nom et une valeur, sans rendre l'objet lui-même immuable : la déclaration à prendre par défaut en JavaScript moderne.
3 min de lecture
Believemy logo

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.

JAVASCRIPT
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.

JAVASCRIPT
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ée

C'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.

Bon à savoir

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éeRedéclarationRéaffectation
constLe blocRefuséeRefusée
letLe blocRefuséeAutorisée
varLa fonctionAutoriséeAutorisé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

Question

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é.


Question

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.


Question

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.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.