typeof en JavaScript : connaître le type d'une valeur, et ses limites

L'opérateur typeof renvoie le type d'une valeur sous forme de texte. Les huit réponses possibles, les deux pièges connus et les tests à lui préférer.
3 min de lecture
Believemy logo

JavaScript accepte qu'une variable change de type en cours de route. Une donnée venue d'un formulaire ou d'une API peut donc être un nombre, un texte ou n'importe quoi d'autre, et le code qui la reçoit a souvent besoin de le savoir avant de la traiter.

typeof répond à cette question en un mot. Il est simple, rapide, disponible partout, et il comporte deux surprises qu'il vaut mieux connaître avant de s'y fier.


Définition

typeof est un opérateur qui renvoie, sous forme de chaîne de caractères, le type de la valeur placée à sa droite. Il ne modifie rien et fonctionne sur n'importe quelle valeur.

JAVASCRIPT
typeof 42;             // 'number'
typeof 'Believemy';    // 'string'
typeof true;           // 'boolean'
typeof undefined;      // 'undefined'
typeof Symbol();       // 'symbol'
typeof 10n;            // 'bigint'
typeof function () {}; // 'function'
typeof { a: 1 };       // 'object'

Le résultat étant du texte, la comparaison se fait avec une chaîne, et l'Égalité stricte (===) est de rigueur : typeof valeur === 'string'.


Les deux pièges

typeof null renvoie 'object'. C'est un défaut des toutes premières versions du langage, conservé depuis par souci de compatibilité : le corriger casserait un nombre considérable de sites en ligne. Pour reconnaître null, comparez directement avec valeur === null.

Un tableau est un objet. typeof [1, 2] vaut aussi 'object', comme une date, une expression régulière ou un objet ordinaire. Le test dédié existe et ne coûte rien : Array.isArray(valeur).

Ce que vous voulez savoirLe bon test
Est-ce un texte, un nombre, un booléentypeof valeur === 'string'
Est-ce nullvaleur === null
Est-ce un tableauArray.isArray(valeur)
Est-ce une instance d'une classevaleur instanceof Client


Le seul opérateur qui accepte l'inconnu

Lire une variable jamais déclarée provoque une erreur qui arrête le script. typeof est la seule exception : appliqué à un nom inconnu, il renvoie 'undefined' sans rien casser.

JAVASCRIPT
console.log(typeof variableInexistante); // 'undefined'
console.log(variableInexistante);        // ReferenceError

Cette tolérance servait autrefois à tester la présence d'une fonctionnalité du navigateur. Elle a une limite : une variable déclarée avec let ou const plus bas dans le même bloc provoque bien une erreur, le nom existant déjà pour le moteur sans être utilisable.

Bon à savoir

typeof distingue les types de base, pas les formes d'objets. Pour vérifier qu'une valeur est bien un client, une erreur ou une date, il faut instanceof, ou tester la présence d'une propriété avec in.


Questions fréquentes

Question

Pourquoi typeof NaN renvoie-t-il 'number' ?

Parce que NaN appartient bel et bien au type nombre : c'est la valeur produite par un calcul numérique qui n'aboutit pas, comme 0 / 0. Le test à utiliser dans ce cas est Number.isNaN(valeur), qui répond à une autre question que celle du type.


Question

Faut-il écrire typeof avec des parenthèses ?

Les deux fonctionnent, typeof valeur comme typeof(valeur), car il s'agit d'un opérateur, pas d'une fonction. La forme sans parenthèses est la plus répandue, et les parenthèses redondantes font parfois croire à un appel de fonction, ce qui n'aide pas à la relecture.


Question

Comment distinguer un objet ordinaire d'un tableau ou d'une date ?

Commencez par écarter null, puis utilisez Array.isArray() pour les tableaux et instanceof pour les dates. Si vous avez besoin d'une réponse plus fine, Object.prototype.toString.call(valeur) renvoie une étiquette précise du genre [object Date], au prix d'une lisibilité nettement moins bonne.

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.