undefined en JavaScript : la valeur de ce qui n'a jamais été rempli

undefined est la valeur que JavaScript pose lui-même quand rien n'a été fourni. Où on la rencontre, comment la tester, et comment lui donner un repli.
3 min de lecture
Believemy logo

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.

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

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

JAVASCRIPT
let connu;
console.log(connu);        // undefined, tout va bien

console.log(inconnue);     // ReferenceError: inconnue is not defined

console.log(typeof inconnue); // "undefined", et aucune erreur

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

Bon à savoir

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

ÉcritureCe qu'elle faitQuand la choisir
valeur === undefinedTeste uniquement undefinedDistinguer d'un null venu du serveur
valeur ?? repliRemplace undefined et nullLe cas courant, une valeur de secours
objet?.proprieteArrête la lecture au lieu de planterTraverser 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

Question

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.


Question

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.


Question

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.

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.