C'est sans doute le mot que vous verrez le plus souvent dans une console, et rarement pour de bonnes raisons. Un undefined affiché à la place d'un prénom, c'est un chemin de données qui ne mène nulle part. Bonne nouvelle : ce n'est pas une erreur, c'est une information.
Définition
undefined est la valeur primitive que JavaScript attribue de lui-même à tout ce qui existe sans avoir reçu de contenu. Contrairement à null, personne ne l'écrit : le moteur la pose à votre place.
Cinq situations la produisent, et les connaître fait gagner du temps en débogage.
let prenom;
console.log(prenom); // 1. déclarée sans valeur
const client = { nom: "Ada" };
console.log(client.age); // 2. propriété absente
console.log([10, 20][7]); // 3. index hors du tableau
function saluer(nom) { return nom; }
console.log(saluer()); // 4. argument non transmis
function rien() {}
console.log(rien()); // 5. fonction sans returnDans les cinq cas, l'affichage est identique. D'où la règle : un undefined isolé ne dit rien, il faut remonter d'un cran pour savoir lequel s'est produit.
Ce qu'il ne faut pas confondre
Une variable qui vaut undefined existe. Une variable jamais déclarée n'existe pas, et le langage réagit différemment aux deux.
let connu;
console.log(connu); // undefined, tout va bien
console.log(inconnue); // ReferenceError: inconnue is not defined
console.log(typeof inconnue); // "undefined", et aucune erreurLa troisième ligne est le seul moyen d'interroger une variable dont on ignore si elle existe, sans faire planter le script. C'est un usage historique de typeof, encore utile pour tester la présence d'un script tiers.
Une valeur par défaut de paramètre ne se déclenche que sur undefined. Écrire function f(nom = "visiteur") puis appeler f(null) donne bien null, pas "visiteur" : seul l'argument absent active le repli.
Trois façons de s'en protéger
| Écriture | Ce qu'elle fait | Quand la choisir |
|---|---|---|
valeur === undefined | Teste uniquement undefined | Distinguer d'un null venu du serveur |
valeur ?? repli | Remplace undefined et null | Le cas courant, une valeur de secours |
objet?.propriete | Arrête la lecture au lieu de planter | Traverser des données extérieures |
La deuxième ligne mérite une insistance particulière. Beaucoup de code ancien écrit valeur || repli, ce qui remplace aussi le zéro et la chaîne vide, deux valeurs souvent légitimes. La Coalescence des nuls (??) a été ajoutée au langage pour corriger ce défaut.
Questions fréquentes
Pourquoi ma fonction renvoie-t-elle undefined ?
Parce qu'aucun return n'a été atteint. Soit la fonction n'en a pas, soit un chemin d'exécution passe à côté, par exemple un if dont aucune branche ne renvoie rien. Le retour de secours du langage est toujours undefined, jamais une erreur : le problème reste donc silencieux jusqu'à l'affichage.
Peut-on assigner undefined à une variable ?
Techniquement oui, mais c'est déconseillé. Écrire x = undefined imite à la main ce que le moteur fait déjà, et brouille la lecture : on ne sait plus si le vide était voulu. Pour un vide décidé, null exprime l'intention bien plus clairement.
Pourquoi undefined apparaît-il dans mon interface ?
Parce qu'une valeur absente a été concaténée dans du texte, où elle devient la chaîne "undefined". Le correctif se pose à la source, sur la donnée plutôt que sur l'affichage. Ces chaînes de propriétés fragiles occupent un chapitre entier de notre formation JavaScript, qui part des erreurs rencontrées en vrai plutôt que de la théorie.