| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/typeof | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
L'oprateur typeof retourne une chane de caractres indiquant le type de la valeur de son oprande.
console.log(typeof 42);
// Sortie attendue : "number"
console.log(typeof "blubber");
// Sortie attendue : "string"
console.log(typeof true);
// Sortie attendue : "boolean"
console.log(typeof undeclaredVariable);
// Sortie attendue : "undefined"
typeof operand
Le tableau qui suit liste les rsultats possibles de l'oprateur typeof. Pour plus d'informations sur les types et valeurs primitives en JavaScript, voir la page sur les types et structures de donnes JavaScript.
| Type | Rsultat |
|---|---|
| Indfini | "undefined" |
| Nul | "object" (reason) |
| Boolen | "boolean" |
| Nombre | "number" |
| Grand Entier | "bigint" |
| Chane de caractres | "string" |
| Symbole | "symbol" |
| Fonction (implmente [[Call]] selon ECMA-262 ; les classes sont galement des fonctions) | "function" |
| Tout autre objet | "object" |
Cette liste de valeurs est exhaustive. Aucun moteur conforme aux spcifications n'est signal pour produire (ou n'a historiquement produit) des valeurs autres que celles numres.
// 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 littralement ce soit "Not-A-Number"
typeof Number("1") === "number"; // Number essaie de convertir l'argument en nombre
typeof Number("chaussure") === "number"; // cela vaut galement pour les valeurs qui ne peuvent pas tre converties
typeof 42n === "bigint";
// Les chanes de caractres
typeof "" === "string";
typeof "bla" === "string";
typeof `gabarit de chane` === "string";
typeof "1" === "string"; // on a ici un nombre crit sous forme d'une chane de caractres
typeof typeof 1 === "string"; // typeof retourne toujours une chane de caractres
typeof String(1) === "string"; // String convertit n'importe quelle valeur en chane de caractres
// Les boolens
typeof true === "boolean";
typeof false === "boolean";
typeof Boolean(1) === "boolean"; // Boolean convertit n'importe quelle valeur en son quivalent logique
typeof !!1 === "boolean"; // deux appels l'oprateur ! (le NON logique) sont quivalents Boolean()
// Les symboles
typeof Symbol() === "symbol";
typeof Symbol("toto") === "symbol";
typeof Symbol.iterator === "symbol";
// Indfini
typeof undefined === "undefined";
typeof variableDeclareeMaisIndefinie === "undefined";
typeof variableNonDeclaree === "undefined";
// Les objets
typeof { a: 1 } === "object";
// Utiliser la mthode Array.isArray ou Object.prototype.toString.call
// afin de diffrencier les objets des tableaux
typeof [1, 2, 4] === "object";
typeof new Date() === "object";
typeof /regex/ === "object";
// Les lments suivants sont source de confusion, dangereux et inutiles. vitez-les.
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";
typeof null// Cela est valable depuis les commencements de JavaScript
typeof null === "object";
Dans la premire implmentation de JavaScript, les valeurs JavaScript taient reprsentes par une balise de type et une valeur. La balise de type pour les objets tait 0. null tait reprsent comme le pointeur NULL (0x00 sur la plupart des plateformes). Par consquent, null avait 0 comme balise de type, d'o la valeur de retour de typeof "object". (rfrence (angl.))
Une correction a t propose pour ECMAScript (avec une option activer), mais a t rejete (angl.). Cela aurait donn typeof null === "null".
newTous les constructeurs appels avec new retourneront des valeurs non primitives ("object" ou "function"). La plupart retournent des objets, l'exception notable de Function, qui retourne une fonction.
const str = new String("String");
const num = new Number(100);
typeof str; // "object"
typeof num; // "object"
const func = new Function();
typeof func; // "function"
L'oprateur typeof a une priorit plus leve que les oprateurs binaires tels que l'addition (+). Par consquent, des parenthses sont ncessaires pour valuer le type d'un rsultat d'addition.
// Les parenthses peuvent tre utilises pour dterminer le type de donnes des expressions.
const uneDonnee = 99;
typeof uneDonnee + " toto"; // "number toto"
typeof (uneDonnee + " toto"); // "string"
typeof fonctionne avec les identifiants non dclars, retournant "undefined" au lieu de lancer une erreur.
typeof variableNonDeclaree; // "undefined"
Cependant, utiliser typeof sur des dclarations lexicales (let const, using await using et class) dans le mme bloc avant le lieu de dclaration gnrera une ReferenceError. Les variables porte de bloc se trouvent dans une zone morte temporelle depuis le dbut du bloc jusqu' ce que l'initialisation soit traite, priode pendant laquelle une erreur sera leve si elles sont accessibles.
typeof newLetVariable; // ReferenceError
typeof newConstVariable; // ReferenceError
typeof newClass; // ReferenceError
let newLetVariable;
const newConstVariable = "bonjour";
class newClass {}
Voir l'oprateur typeof et undefined pour plus de dtails.
document.allTous les navigateurs actuels exposent un objet hte non standard document.all avec le type undefined.
typeof document.all === "undefined";
Bien que document.all soit galement quivalent faux et gal undefined de manire lche, il n'est pas undefined. Le cas de document.all ayant le type "undefined" est class dans les standards web comme une violation volontaire de la norme ECMAScript originale pour la compatibilit web.
typeof est trs utile, mais il n'est pas aussi polyvalent que ncessaire. Par exemple, typeof [] est "object", tout comme typeof new Date(), typeof /abc/, etc.
Pour une plus grande spcificit dans la vrification des types, nous prsentons une fonction personnalise type(value), qui imite en grande partie le comportement de typeof, mais pour les non-primitifs (c'est--dire les objets et les fonctions), elle retourne un nom de type plus granulaire lorsque cela est possible.
function type(value) {
if (value === null) {
return "null";
}
const baseType = typeof value;
// Types primitifs
if (!["object", "function"].includes(baseType)) {
return baseType;
}
// Symbol.toStringTag dfinit souvent le "nom d'affichage" de la
// classe de l'objet. Il est utilis dans Object.prototype.toString().
const tag = value[Symbol.toStringTag];
if (typeof tag === "string") {
return tag;
}
// Si c'est une fonction dont le code source commence par le mot-cl "class"
if (
baseType === "function" &&
Function.prototype.toString.call(value).startsWith("class")
) {
return "class";
}
// Le nom du constructeur ; par exemple `Array`, `GeneratorFunction`,
// `Number`, `String`, `Boolean` ou `MyCustomClass`
const className = value.constructor.name;
if (typeof className === "string" && className !== "") {
return className;
}
// ce stade, il n'existe pas de mthode robuste pour obtenir le type
// de la valeur, donc nous utilisons l'implmentation de base.
return baseType;
}
Pour vrifier des variables potentiellement inexistantes qui autrement dclencheraient une ReferenceError, utilisez typeof nonExistentVar === "undefined" car ce comportement ne peut pas tre imit avec du code personnalis.
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-typeof-operator |
Cette page a t modifie le 22 mai 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |