TypeError: invalid assignment to const "x"

Message

TypeError: invalid assignment to const "x" (Firefox)
TypeError: Assignment to constant variable. (Chrome)
TypeError: Redeclaration of const 'x' (Edge)

Type d'erreur

Quel est le problème ?

Une constante est une valeur qui ne peut pas √™tre modifi√©e lors de l'ex√©cution du programme. Elle ne peut pas √™tre modifi√©e gr√Ęce √† une r√©affectation ou gr√Ęce √† une red√©claration. En JavaScript, les constantes sont d√©clar√©es gr√Ęce au mot-cl√© const.

Exemples

Redéclaration invalide

Si on affecte une valeur à une constante dans la même portée de bloc que celui qui contient l'affectation initiale, une exception sera levée :

const COLUMNS = 80;

// ...

COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'

Résoudre le problème

Il existe plusieurs fa√ßons de r√©soudre ce probl√®me et il faut au pr√©alable comprendre le r√īle de la constante en question.

Utiliser un autre nom

Si on souhaite déclarer une autre constante, on peut utiliser un autre nom que celui qui est déjà pris dans cette portée :

const COLUMNS = 80;
const WIDE_COLUMNS = 120;

const, let ou var ?

const ne doit pas √™tre utilis√© si on ne souhaite pas d√©clarer de constante. Peut-√™tre qu'on souhaite simplement d√©clarer une variable avec une port√©e de bloc gr√Ęce √† let ou une variable globale avec var.

let columns = 80;

// ...

let columns = 120;

Gérer les portées

On peut √©galement v√©rifier qu'on est dans la bonne port√©e. Est-ce que la constante devait appara√ģtre dans la port√©e en question ou devait √™tre utilis√©e dans une fonction ?

const COLUMNS = 80;

function setupBigScreenEnvironment() {
  const COLUMNS = 120;
}

const et l'immuabilité

La déclaration const crée une référence en lecture seule vers une valeur. Elle ne signifie pas que la valeur en question est immuable mais uniquement que l'identifiant de la référence ne peut pas recevoir de nouvelle valeur. Ainsi, si le contenu est un objet, celui-ci pourra toujours être modifié :

const obj = {toto: 'truc'};
obj = {toto: 'bidule'}; // TypeError: invalid assignment to const `obj'

En revanche, on peut modifier les propriétés :

obj.toto = 'bidule';
obj; // Object { toto: "bidule" }

Voir aussi