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'