Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence
  4. Expressions et opérateurs
  5. L'opérateur typeof

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

L'opérateur typeof

Baseline Widely available

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'opérateurtypeof renvoie une chaîne qui indique le type de son opérande.

Exemple interactif

console.log(typeof 42);// Expected output: "number"console.log(typeof "blubber");// Expected output: "string"console.log(typeof true);// Expected output: "boolean"console.log(typeof undeclaredVariable);// Expected output: "undefined"

Syntaxe

L'opérateurtypeof est suivi de son opérande :

js
typeof operande;typeof operande;

Paramètre

operande

Une expression représentant l'objet ou la valeurprimitive dont on souhaite obtenir le type.

Description

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

TypeRésultat
indéfini"undefined"
nul"object" (voir ci-après)
booléen"boolean"
nombre"number"
grand entier (nouveauté d'ECMAScript 2020)"bigint"
chaîne de caractère"string"
symbole (nouveauté d'ECMAScript 6 / 2015)"symbol"
objet Function (au sens ECMA-262, un objet qui implémente [[Call]])"function"
Tout autre objet"object"

Exemples

Usage simple

js
// Pour les nombrestypeof 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"; // Number essaie de convertir l'argument en nombretypeof Number("chaussure") === "number"; // cela vaut également pour les valeurs qui ne peuvent pas être converties// Grand entiertypeof 42n === "bigint";// Les chaînes de caractèrestypeof "" === "string";typeof "bla" === "string";typeof `gabarit de chaîne` === "string";typeof "1" === "string"; // on a ici un nombre écrit sous forme d'une chaînetypeof typeof 1 === "string"; // typeof renvoie toujours une chaînetypeof String(1) === "string"; // String convertit n'importe quelle valeur en chaîne// Les booléenstypeof true === "boolean";typeof false === "boolean";typeof Boolean(1) === "boolean"; // Boolean convertit n'importe quelle valeur en son équivalent logiquetypeof !!1 === "boolean"; // deux appels à l'opérateur ! (le NON logique) sont équivalents à Boolean()// Les symbolestypeof Symbol() === "symbol";typeof Symbol("toto") === "symbol";typeof Symbol.iterator === "symbol";// Indéfinitypeof undefined === "undefined";typeof variableDeclareeMaisIndefinie === "undefined";typeof variableNonDeclaree === "undefined";// Les objetstypeof { a: 1 } === "object";// Utiliser la méthode Array.isArray ou Object.prototype.toString.call// afin de différencier les objets des tableauxtypeof [1, 2, 4] === "object";typeof new Date() === "object";typeof /regex/ === "object"; // Voir la section sur les expressions rationnelles// Les expressions suivantes sont source de confusion// à ne pas utiliser sous cette formetypeof new Boolean(true) === "object";typeof new Number(1) === "object";typeof new String("abc") === "object";// Les fonctionstypeof function () {} === "function";typeof class C {} === "function";typeof Math.sin === "function";

typeof null

js
// Cela est valable depuis les commencements de JavaScripttypeof 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 denull valait 0, d'où le comportement detypeof (source).

Un correctif fut proposé pour ECMAScript, mais il futrefusé. Avec cette version, on aurait eutypeof null === 'null'.

Utiliser l'opérateurnew

js
// Tous les constructeurs doivent être employés// avec le mot-clé "new"let maChaine = new String("toto");let monNombre = new Number(100);typeof maChaine; // renverra "object"typeof monNombre; // renverra "object"// En revanche avec le constructeur Function,// on aura :let maFonction = new Function();typeof maFonction; // renverra "function"

Utilisation des parenthèses

js
// Les parenthèses peuvent s'avérer utile pour// déterminer le type de données d'une expression// complètelet maDonnee = 99;typeof maDonnee + " Toto"; // renverra 'number Toto'typeof (maDonnee + " Toto"); // renverra 'string'

Expressions rationnelles

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

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

Erreurs et zone morte temporaire (Temporal Dead Zone / TDZ)

Avant ECMAScript 2015 (ES6),typeof retournait toujours une chaîne de caractères, quel que soit l'opérande utilisé. On ne pouvait pas avoir d'erreur en utilisanttypeof.

Avec l'apparition des opérateurslet etconst, si on utilisetypeof sur des variables déclarées avec ces opérateurs (ou avec une classe) avant leur déclaration, cela déclenchera une erreurReferenceError. Si on utilisetypeof sur une variable déclarée avecvar avant la déclaration, cela renverraundefined. Les variables déclarées aveclet etconst sont en fait placées dans unezone morte temporaire entre le début du bloc et leur initialisation et dans cette zone, tout accès à la variable produit une erreur.

js
typeof variableGlobaleNonDeclaree === "undefined";typeof variableLet; // ReferenceErrorlet variableLet;typeof constante; // ReferenceErrorconst constante = "coucou";typeof maClasse; // ReferenceErrorclass maClasse {}

Exceptions

Tous les navigateurs actuels exposent un objet non-standarddocument.all dont le type estundefined.

js
typeof document.all === "undefined";

Bien que la spécification requière que les objets exotiques aient des types différents, ces types doivent être des chaînes différentes des chaînes existantes pour les objets standards. À ce titre, le type dedocument.all représente une violation « volontaire » du standard ECMAScript original.

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-typeof-operator

Compatibilité des navigateurs

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 :

js
typeof alert === "object";

Certaines propriétés non-standard d'IE renvoient d'autres valeurs (tc39/ecma262#1440(commentaire)):

js
typeof window.external.AddSearchProvider === "unknown";typeof window.external.IsSearchProviderInstalled === "unknown";

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp