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" |
Exemples
// Pour les nombres typeof 37 === 'number'; typeof 3.14 === 'number'; typeof(42) === '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 | État | Commentaires |
---|---|---|
ECMAScript 2017 Draft (ECMA-262) La définition de 'Opérateur typeof' dans cette spécification. |
Projet | |
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
- L'opérateur
instanceof