Der typeof Operator gibt eine Zeichenkette zurück, die den Typ des unausgewerteten Operanden beschreibt.
Syntax
Dem typeof Operator folgt sein Operand:
typeof Operand
Parameter
Operand ist ein Ausdruck, dessen Typ zurückgegeben werden soll. Dies kann ein Objekt oder ein primitive sein.
Beschreibung
Die folgende Tabelle fasst die möglichen Rückgabewerte von typeof zusammen. Mehr Informationen zu Typen und Primitiven sind auf der Seite JavaScript data structure zu finden.
| Typ | Rückgabewert |
|---|---|
| Undefined | "undefined" |
| Null | "object" (see below) |
| Boole'scher Wert | "boolean" |
| Zahl | "number" |
| Zeichenkette | "string" |
| Symbol (neu in ECMAScript 2015) | "symbol" |
| Host-Objekt (von der JS-Umgebung bereitgestellt) | implementierungsabhängig |
| Funktionsobjekt (implementiert [[Call]] nach ECMA-262) | "function" |
| Alle anderen Objekte | "object" |
Beispiele
// Zahlen
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // obwohl es "Not-A-Number" ist
typeof Number(1) === 'number'; // niemals so verwenden!
// Zeichenketten
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof gibt immer eine Zeichenkette zurück
typeof String("abc") === 'string'; // niemals so verwenden!
// Boole'sche Werte
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // niemals so verwenden!
// Symbols
typeof Symbol() === 'symbol'
typeof Symbol('foo') === 'symbol'
typeof Symbol.iterator === 'symbol'
// Undefined
typeof undefined === 'undefined';
typeof declaredBugUndefinedVariable === 'undefined'
typeof undeclaredVariable === 'undefined';
// Objekte
typeof {a:1} === 'object';
// Array.isArray oder Object.prototype.toString.call verwenden,
// um reguläre Objekte von Arrays zu unterscheiden
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
// Folgende Beispiele sind verwirrend, nicht verwenden!
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String("abc") === 'object';
// Funktionen
typeof function(){} === 'function';
typeof class C {} === 'function';
typeof Math.sin === 'function';
null
// This stands since the beginning of JavaScript typeof null === 'object';
In der ersten JavaScript-Implementierung bestanden JavaScript-Werte aus einem Typenbezeichner und dem eigentlichen Wert. Der Typenbezeichner für Objekte war 0. null wurde durch den NULL-Zeiger dargestellt (auf den meisten Plattformen auf Speicheradresse 0x00 zeigend). Infolgedessen besaß null den Typenbezeichner 0, wodurch der seltsame Rückgabewert für typeof entstand. (Quelle)
Es gab einen Korrekturvorschlag für ECMAScript, der aber zurückgewiesen wurde. Dadurch wäre typeof null === 'null' gewesen.
Reguläre Ausdrücke
Aufrufbare reguläre Ausdrücke waren eine nicht standardkonforme Erweiterung in manchen Browsern.
typeof /s/ === 'function'; // Chrome 1-12, nicht ECMAScript 5.1-konform typeof /s/ === 'object'; // Firefox 5+, ECMAScript 5.1-konform
Spezifikationen
| Spezifikation | Status | Kommentar |
|---|---|---|
| ECMAScript 2017 Draft (ECMA-262) Die Definition von 'The typeof Operator' in dieser Spezifikation. |
Entwurf | |
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'The typeof Operator' in dieser Spezifikation. |
Standard | |
| ECMAScript 5.1 (ECMA-262) Die Definition von 'The typeof Operator' in dieser Spezifikation. |
Standard | |
| ECMAScript 3rd Edition (ECMA-262) Die Definition von 'The typeof Operator' in dieser Spezifikation. |
Standard | |
| ECMAScript 1st Edition (ECMA-262) Die Definition von 'The typeof Operator' in dieser Spezifikation. |
Standard | Initiale Definition. Implementiert in JavaScript 1.1. |
Browserkompatibilität
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
IE-Spezifischer Hinweis
In IE 6, 7 und 8 sind viele Hostobjekte als Objekte statt Funktionen typisiert, zum Beispiel:
typeof alert === 'object'