De typeof-operator geeft een string terug die het type van de ongeëvalueerde operand weergeeft.

Syntaxis

De typeof-operator wordt gevolgd door zijn operand:

typeof operand

Parameters

operand is een uitdrukking die het object of de primitief voorstelt waarvan het type moet worden teruggegeven.

Beschrijving

De volgende tabel bevat de mogelijke waarden die typeof kan teruggeven. Voor meer informatie over types of primitieven, zie pagina datastructuren in Javascript.

Type Resultaat
Undefined "undefined"
Null "object" (see below)
Boolean "boolean"
Number "number"
String "string"
Symbol (nieuw in ECMAScript 2015) "symbol"
Host object (voorzien door de JS omgeving) Implementatie-afhankelijk
Function object (implementeert [[Call]] in termen van ECMA-262) "function"
Elk ander object "object"

 

Voorbeelden

// Nummers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof(42) === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // Ondanks dat het "Not-A-Number" is
typeof Number(1) === 'number'; // maar gebruik deze manier nooit!


// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof geeft altijd een string terug
typeof String("abc") === 'string'; // maar gebruik deze manier nooit!


// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // maar gebruik deze manier nooit!


// Symbolen
typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'
typeof Symbol.iterator === 'symbol'


// Ongedefinieerd
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined'; 


// Objecten
typeof {a:1} === 'object';

// gebruik Array.isArray of Object.prototype.toString.call
// om het verschil aan te geven tussen normale objecten en
// arrays (rijen).
typeof [1, 2, 4] === 'object';

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


// Het volgende is verwarrend. Niet gebruiken!
typeof new Boolean(true) === 'object'; 
typeof new Number(1) === 'object'; 
typeof new String("abc") === 'object';


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

null

// Dit geldt sinds het ontstaan van JavaScript
typeof null === 'object';

In de oorspronkelijke implementatie van JavaScript werden JavaScript-waarden gerepresenteerd met een type-label en een waarde. Het type-label voor de meeste objecten was 0. null werd voorgesteld als de NULL-pointer (0x00 in de meeste platformen). Daarom had null het type-label 0, wat de foute typeof teruggeefwaarde verklaart. (referentie)

Een oplossing (via een opt-in) werd voorgesteld voor ECMAScript, maar die werd afgekeurd. Anders zou het er als volgt hebben uitgezien: typeof null === 'null'.

De new-operator gebruiken

// Alle constructorfuncties die worden geïnstantieerd met het 
// 'new'-sleutelwoord, zullen altijd typeof 'object' zijn.
var str = new String('String');
var num = new Number(100);

typeof str; // Geeft 'object' terug
typeof num; // Geeft 'object' terug

// Maar er is een uitzondering in het geval van de functieconstructor van JavaScript.

var func = new Function();

typeof func; // Geeft 'function' terug

Reguliere uitdrukkingen

Aanroepbare reguliere uitdrukkingen waren een niet-standaard toevoeging in sommige browsers.

typeof /s/ === 'function'; // Chrome 1-12 Niet comform aan ECMAScript 5.1
typeof /s/ === 'object';   // Firefox 5+  Conform aan ECMAScript 5.1

Temporal Dead Zone-fouten

Voor ECMAScript 2015 gaf typeof altijd gegarandeerd een string terug voor elke operand waarmee het was voorzien. Maar met de toevoeging van niet-gehoiste, blokgekaderde let en const ontstaat er een ReferenceError als typeof op let- en const-variabelen wordt gebruikt voordat ze zijn benoemd. Dit staat in contrast met onbenoemde variabelen, waarvoor typeof 'undefined' teruggeeft. Blokgekaderde variabelen zijn in een "temporal dead zone" vanaf het begin van het blok totdat de intialisatie is verwerkt, waarin een fout ontstaat als ze worden benaderd.

typeof onbenoemdeVariabele === 'undefined';
typeof nieuweLetVariabele; let nieuweLetVariabele; // ReferenceError
typeof nieuweConstVariabele; const nieuweConstVariabele = 'hallo'; // ReferenceError

Uitzonderingen

Alle huidige browsers onthullen een niet-standaard hostobject document.all met type undefined.

typeof document.all === 'undefined';

Hoewel de specificatie aangepaste type-labels toestaat voor niet-standaard exotische objecten, vereist het dat die type-labels verschillen van de ingebouwde. Dat document.all een type-label undefined heeft moet worden geclassificeerd als een uitzonderlijke overtreding van de regels.

Specificaties

Specificatie Status Opmerking
ECMAScript Latest Draft (ECMA-262)
The definition of 'The typeof Operator' in that specification.
Draft  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'The typeof Operator' in that specification.
Standard  
ECMAScript 5.1 (ECMA-262)
The definition of 'The typeof Operator' in that specification.
Standard  
ECMAScript 3rd Edition (ECMA-262)
The definition of 'The typeof Operator' in that specification.
Standard  
ECMAScript 1st Edition (ECMA-262)
The definition of 'The typeof Operator' in that specification.
Standard Oorspronkelijke definitie. Geïmplementeerd in JavaScript 1.1.

Browsercompatibiliteit

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome voor AndroidEdge MobileFirefox voor AndroidOpera voor AndroidiOS SafariSamsung InternetNode.js
BasisondersteuningChrome Volledige ondersteuning JaEdge Volledige ondersteuning JaFirefox Volledige ondersteuning 1IE Volledige ondersteuning JaOpera Volledige ondersteuning JaSafari Volledige ondersteuning JaWebView Android Volledige ondersteuning JaChrome Android Volledige ondersteuning JaEdge Mobile Volledige ondersteuning JaFirefox Android Volledige ondersteuning 4Opera Android Volledige ondersteuning JaSafari iOS Volledige ondersteuning JaSamsung Internet Android Volledige ondersteuning Janodejs Volledige ondersteuning Ja

Legenda

Volledige ondersteuning  
Volledige ondersteuning

IE-specifieke opmerkingen

In IE 6, 7, en 8 zijn een groot aantal host objecten objecten en geen functions. bijvoorbeeld:

typeof alert === 'object'

Zie ook

Documentlabels en -medewerkers

Aan deze pagina hebben bijgedragen: evelijn, lackodan
Laatst bijgewerkt door: evelijn,