L'opérateur typeof

L'opérateur typeof renvoie une chaîne qui indique le type de son opérande.

Syntaxe

L'opérateur typeof est suivi de son opérande :

typeof opérande

Paramètre

opérande est une expression qui représente la valeur dont on souhaite obtenir le type.

Description

Le tableau qui suit liste les résultats possibles de l'opérateur typeof. Pour plus d'informations sur les types et valeurs primitives en JavaScript, voir la page sur les types et structures de données JavaScript.

Type Résultat
indéfini "undefined"
nul "object" (see below)
booléen "boolean"
nombre "number"
chaîne de caractère "string"
symbole (nouveauté d'ECMAScript 6 / 2015) "symbol"
objet de l'environnement (fourni par l'environnement dans lequel est utilisé JS) Résultat différent selon l'implémentation
Objet Function (au sens ECMA-262, un objet qui implémente [[Call]]) "function"
Tout autre objet "object"

Exemple

// Pour les nombres
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // Bien que littéralement ce soit "Not-A-Number"...
typeof Number(1) === 'number'; // cette forme ne doit pas être utilisée !


// Les chaînes de caractères
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof renvoie toujours une chaîne
typeof String("abc") === 'string'; // cette forme ne doit pas être utilisée !


// Les booléens
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // cette forme ne doit pas être utilisée !


// Les symboles
typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'
typeof Symbol.iterator === 'symbol'


// Indéfini
typeof undefined === 'undefined';
typeof blabla === 'undefined'; // pour une variable indéfinie


// Les objets
typeof {a:1} === 'object';

// Utiliser la méthode Array.isArray ou Object.prototype.toString.call
// afin de différencier les objets des tableaux
typeof [1, 2, 4] === 'object';

typeof new Date() === 'object';


// Les expressions suivantes sont source de confusion
// à ne pas utiliser sous cette forme
typeof new Boolean(true) === 'object'; 
typeof new Number(1) === 'object'; 
typeof new String("abc") === 'object';


// Les fonctions
typeof function(){} === 'function';
typeof class C {} === 'function';
typeof Math.sin === 'function';

null

// Cela est valable depuis les commencements de JavaScript
typeof null === 'object';

Lors de la première implémentation de JavaScript, les valeurs JavaScript étaient représentées avec une étiquette de type et une valeur. Pour les objets, l'étiquette de type était 0. null était représenté par la valeur NULL (0x00 pour la plupart des plates-formes). Par conséquent, l'étiquette de type de null valait 0, d'où le comportement de typeof (source).

Un correctif fut proposé pour ECMAScript mais il fut refusé. Avec cette version, on aurait eu typeof null === 'null'.

Expressions rationnelles

Les expressions rationnelles qu'on peut appeler directement furent parfois ajoutées de façon non standard dans certains navigateurs.

typeof /s/ === 'function'; // Chrome 1 à 12 : Non conforme à ECMAScript 5.1
typeof /s/ === 'object';   // À partir de Firefox 5 : Conforme à ECMAScript 5.1

Spécifications

Spécification Statut Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Opérateur typeof' dans cette spécification.
Standard  
ECMAScript 5.1 (ECMA-262)
La définition de 'Opérateur typeof' dans cette spécification.
Standard  
ECMAScript 3rd Edition (ECMA-262)
La définition de 'Opérateur typeof' dans cette spécification.
Standard  
ECMAScript 1st Edition (ECMA-262)
La définition de 'Opérateur typeof' dans cette spécification.
Standard Définition initiale, implémentée avec JavaScript 1.1.

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple (Oui) (Oui) (Oui) (Oui) (Oui)
Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

Notes spécifiques à IE

Pour les versions 6, 7 et 8 d'Internet Explorer, les objets de l'environnement hôte sont des objets et non des fonctions. Par exemple, on aura :

typeof alert === 'object'

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, teoli, Jeremie, Mgjbot, BenoitL
Dernière mise à jour par : SphinxKnight,
Masquer la barre latérale