null en JavaScript : la valeur vide posée volontairement

null est la valeur qui affirme qu'une variable est vide exprès. Comment la tester, en quoi elle diffère de undefined, et pourquoi typeof null ment.
3 min de lecture
Believemy logo

Une variable vide, ce n'est pas si simple qu'il y paraît. Il y a le rien qu'on a décidé, écrit noir sur blanc pour signaler qu'une case est libre, et le rien subi, celui d'une valeur que personne n'a renseignée. JavaScript distingue les deux.


Définition

null est une valeur primitive qui signifie l'absence volontaire de valeur. C'est un mot-clé réservé : il s'écrit tel quel, en minuscules, sans guillemets.

Tout tient dans un seul mot, volontaire. Personne ne trouve null par hasard : il est là parce que quelqu'un l'a écrit, ou parce qu'une fonction a choisi de le renvoyer pour dire qu'elle n'a rien trouvé.

JAVASCRIPT
let utilisateurConnecte = null; // personne pour l'instant

// Une recherche infructueuse renvoie null, pas une erreur
const bouton = document.querySelector(".introuvable");
console.log(bouton); // null

Ces deux lignes résument l'usage courant : une valeur de départ à remplir plus tard, et une recherche qui n'a rien donné.


null face à undefined

Les deux valeurs disent qu'il n'y a rien, mais la première est une décision et la seconde un constat.

Questionnullundefined
Qui l'a mis làVous, ou une fonctionLe moteur JavaScript
Ce que ça veut direVide exprèsJamais rempli
Résultat de typeof"object""undefined"
Conservé par JSON.stringifyOuiNon, la clé disparaît

La dernière ligne compte dès qu'une donnée part vers un serveur. Envoyer { ville: null } demande d'effacer la ville. Envoyer { ville: undefined } n'envoie rien, et le serveur garde l'ancienne valeur.


Le bug le plus célèbre du langage

JAVASCRIPT
console.log(typeof null);            // "object"
console.log(null instanceof Object); // false

Les deux lignes se contredisent, et la seconde a raison. C'est un défaut d'origine, hérité de la première implémentation du langage en 1995, jamais corrigé parce que le rectifier casserait trop de sites.

Bon à savoir

Conséquence pratique : typeof valeur === "object" ne suffit pas à reconnaître un objet. Il faut passer par Object (objet).prototype.toString.call(valeur).


Le tester proprement

Trois écritures reviennent, qui ne posent pas la même question.

JAVASCRIPT
const v = null;

v === null      // true : uniquement null
v == null       // true : null OU undefined
v ?? "secours"  // "secours" : la valeur de repli

La troisième est celle du quotidien : la Coalescence des nuls (??) traite null et undefined ensemble, ce qui correspond presque toujours au besoin réel. Méfiez-vous en revanche des comparaisons d'ordre, qui convertissent null en zéro là où l'Égalité faible (==) ne le fait pas.


Questions fréquentes

Question

Faut-il initialiser une variable à null ou la laisser vide ?

Mettez null quand le vide fait partie du scénario prévu, un utilisateur pas encore connecté par exemple. Laissez la variable non affectée quand elle sera remplie juste après : la première écriture documente une intention, la seconde un simple constat.


Question

Pourquoi une API renvoie-t-elle null plutôt que d'omettre le champ ?

Parce que les deux réponses ne disent pas la même chose. Un champ présent à null affirme que l'information a été cherchée et n'existe pas. Un champ absent laisse le doute : peut-être n'a-t-il pas été demandé. Les API sérieuses gardent le champ.


Question

Comment éviter l'erreur « cannot read properties of null » ?

Elle survient quand on lit une propriété sur une valeur vide. Le Chaînage optionnel (?.) la neutralise en une ligne : element?.textContent renvoie undefined au lieu de faire planter la page. Sur du code ancien, un if (element) fait le même travail.

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.