typeof

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'

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: schlagi123, dmarku
 Zuletzt aktualisiert von: schlagi123,