Les variables : var, let
À l’origine de Javascript, seul le mot-clé var permettait de déclarer une variable. Son implémentation permet cependant de faire un peu n’importe quoi. C’est pourquoi le mot-clé let a été introduit.
Avec var, il est possible de déclarer plusieurs fois une variable du même nom. Il est également possible de créer une variable sans le mot-clé, et de la définir après coup avec le mot-clé.
// Possible avec 'var' : Déclarer plusieurs fois la même variable var my_name = "Jo"; var my_name = "Marty"; // Possible avec 'var' : Déclarer la variable après l'avoir utilisé my_name = "Jo"; var my_name;
Ces deux cas ne sont plus possibles avec le mot-clé let. Ils provoqueront tous les deux une erreur.
L’utilisation de var est toujours possible, notamment s’il s’agit de définir une variables globale ou locale à une fonction. En effet, une autre différence importante et que let déclare une variable dont la portée est celle du bloc courant. Cela signifie qu’une variable déclarée via let dans une boucle n’aura d’existence que dans cette boucle, et qu’il sera possible d’avoir une toute autre variable mais ayant le même nom en dehors de cette boucle.
Les constantes : const
Le mot-clé const permet de déclarer une constante. La portée sera celle du bloc courant. Une constante n’est accessible qu’en lecture seule.
Il est impossible de déclarer une constante avec un nom déjà utilisé par une variable dans la même portée (bloc / fonction / etc.).
Portée des variables
Tout ce qui est défini avec les mots-clés let et const n’existe que dans le bloc de la déclaration.
Dans l’exemple ci-dessous, la variable message n’existe que dans le bloc if. On obtiendra donc l’erreur Javascript :
Uncaught ReferenceError : message is not defined
if (compte_inactif === true) {
let message = 'Connexion refusée.';
}
console.log(message);Supprimer une variable
Pour supprimer une variable, un objet, une propriété d’un objet ou un élément d’un tableau à partir de sa position dans le tableau, on utilise le mot-clé delete.
delete mon_objet; delete mon_objet.propriété; delete mon_objet[index];
Attention : Lorsqu’on supprime un élément d’un tableau, la longueur du tableau n’est pas modifiée. L’élément supprimé est en réalité toujours accessible mais il retournera undefined.
Éviter les variables globales et bien définir le type des variables
Pour éviter tout comportement non souhaité ou utilisation de valeurs et/ou type d’une variable hérité d’un usage précédent, il est fortement recommandé de déclarer des variables locales à un script avec le mot clé let et d’en définit le type.
Le mot-clé let est à privilégier par rapport à l’ancien mot-clé var, sous condition qu’il ne soit plus nécessaire de supporter les versions d’Internet Explorer antérieures à 11.
Lors de l’utilisation d’un tableau ou d’un objet par exemple, on l’instanciera en définissant son type ainsi :
// Tableau vide
let array1 = [];
// Tableau avec données
let array2 = [1, 2, 3];
// Objet vide
let objet = {};