Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Ausdrücke und Operatoren
  5. typeof

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

typeof

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

Dertypeof Operator gibt einen String zurück, der den Typ des Werts des Operanden angibt.

Probieren Sie es aus

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"

Syntax

js
typeof operand

Parameter

operand

Ein Ausdruck, der das Objekt oderPrimitiv darstellt, dessen Typ zurückgegeben werden soll.

Beschreibung

Die folgende Tabelle fasst die möglichen Rückgabewerte vontypeof zusammen. Weitere Informationen zu Typen und primitiven Datentypen finden Sie auf der SeiteJavaScript-Datenstruktur.

TypErgebnis
Undefined"undefined"
Null"object" (Grund)
Boolean"boolean"
Number"number"
BigInt"bigint"
String"string"
Symbol"symbol"
Function (implementiert [[Call]] in ECMA-262-Terms;Klassen sind ebenfalls Funktionen)"function"
Jedes andere Objekt"object"

Diese Liste der Werte ist vollständig. Es sind keine spezifikationskonformen Engines bekannt, die Werte produzieren (oder historisch produziert haben), die anders als die hier aufgeführten sind.

Beispiele

Grundlegende Verwendung

js
// Numberstypeof 37 === "number";typeof 3.14 === "number";typeof 42 === "number";typeof Math.LN2 === "number";typeof Infinity === "number";typeof NaN === "number"; // Despite being "Not-A-Number"typeof Number("1") === "number"; // Number tries to parse things into numberstypeof Number("shoe") === "number"; // including values that cannot be type coerced to a numbertypeof 42n === "bigint";// Stringstypeof "" === "string";typeof "bla" === "string";typeof `template literal` === "string";typeof "1" === "string"; // note that a number within a string is still typeof stringtypeof typeof 1 === "string"; // typeof always returns a stringtypeof String(1) === "string"; // String converts anything into a string, safer than toString// Booleanstypeof true === "boolean";typeof false === "boolean";typeof Boolean(1) === "boolean"; // Boolean() will convert values based on if they're truthy or falsytypeof !!1 === "boolean"; // two calls of the ! (logical NOT) operator are equivalent to Boolean()// Symbolstypeof Symbol() === "symbol";typeof Symbol("foo") === "symbol";typeof Symbol.iterator === "symbol";// Undefinedtypeof undefined === "undefined";typeof declaredButUndefinedVariable === "undefined";typeof undeclaredVariable === "undefined";// Objectstypeof { a: 1 } === "object";// use Array.isArray or Object.prototype.toString.call// to differentiate regular objects from arraystypeof [1, 2, 4] === "object";typeof new Date() === "object";typeof /regex/ === "object";// The following are confusing, dangerous, and wasteful. Avoid them.typeof new Boolean(true) === "object";typeof new Number(1) === "object";typeof new String("abc") === "object";// Functionstypeof function () {} === "function";typeof class C {} === "function";typeof Math.sin === "function";

typeof null

js
// This stands since the beginning of JavaScripttypeof null === "object";

In der ersten Implementierung von JavaScript wurden JavaScript-Werte als ein Typ-Tag und ein Wert dargestellt. Das Typ-Tag für Objekte war0.null wurde als der NULL-Zeiger (0x00 auf den meisten Plattformen) dargestellt. Folglich hattenull das Typ-Tag0, daher dertypeof-Rückgabewert"object". (Referenz)

Ein Fix wurde für ECMAScript vorgeschlagen (via Opt-In), aberwurde abgelehnt. Er hätte zutypeof null === "null" geführt.

Verwendung des new-Operators

Alle Konstrukturfunktionen, die mitnew aufgerufen werden, geben Nicht-Primitiva zurück ("object" oder"function"). Die meisten geben Objekte zurück, mit der bemerkenswerten AusnahmeFunction, die eine Funktion zurückgibt.

js
const str = new String("String");const num = new Number(100);typeof str; // "object"typeof num; // "object"const func = new Function();typeof func; // "function"

Notwendigkeit von Klammern in der Syntax

Dertypeof-Operator hat eine höherePräzedenz als binäre Operatoren wie Addition (+). Daher sind Klammern erforderlich, um den Typ eines Additionsergebnisses zu bewerten.

js
// Parentheses can be used for determining the data type of expressions.const someData = 99;typeof someData + " foo"; // "number foo"typeof (someData + " foo"); // "string"

Interaktion mit nicht deklarierten und nicht initialisierten Variablen

typeof ist im Allgemeinen immer garantiert, einen String für jeden übergebenen Operand zurückzugeben. Selbst bei nicht deklarierten Bezeichnern wirdtypeof"undefined" zurückgeben, anstatt einen Fehler auszulösen.

js
typeof undeclaredVariable; // "undefined"

Jedoch führt die Verwendung vontypeof bei lexikalischen Deklarationen (letconst undclass) im selben Block vor dem Deklarationsort zu einemReferenceError. Block-skopierte Variablen befinden sich in einertemporalen Dead Zone vom Start des Blocks bis zur Initialisierung, während derer ein Fehler ausgelöst wird, wenn darauf zugegriffen wird.

js
typeof newLetVariable; // ReferenceErrortypeof newConstVariable; // ReferenceErrortypeof newClass; // ReferenceErrorlet newLetVariable;const newConstVariable = "hello";class newClass {}

Außergewöhnliches Verhalten von document.all

Alle aktuellen Browser setzen ein nicht-standardmäßiges Host-Objektdocument.all mit dem Typundefined ein.

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

Obwohldocument.all auchfalsy ist undlose gleich zuundefined, ist es nichtundefined. Der Fall, dassdocument.all den Typ"undefined" hat, wird in den Webstandards als "willkürliche Verletzung" des ursprünglichen ECMAScript-Standards für die Webkompatibilität klassifiziert.

Benutzerdefinierte Methode, die einen spezifischeren Typ erhält

typeof ist sehr nützlich, aber es ist nicht so vielseitig, wie es sein könnte. Zum Beispiel isttypeof []"object", ebenso wietypeof new Date(),typeof /abc/, usw.

Für mehr Spezifität bei der Typprüfung stellen wir hier eine benutzerdefiniertetype(value) Funktion vor, die größtenteils das Verhalten vontypeof nachahmt, aber bei Nicht-Primitiven (d.h. Objekten und Funktionen) einen detaillierteren Typnamen zurückgibt, wo möglich.

js
function type(value) {  if (value === null) {    return "null";  }  const baseType = typeof value;  // Primitive types  if (!["object", "function"].includes(baseType)) {    return baseType;  }  // Symbol.toStringTag often specifies the "display name" of the  // object's class. It's used in Object.prototype.toString().  const tag = value[Symbol.toStringTag];  if (typeof tag === "string") {    return tag;  }  // If it's a function whose source code starts with the "class" keyword  if (    baseType === "function" &&    Function.prototype.toString.call(value).startsWith("class")  ) {    return "class";  }  // The name of the constructor; for example `Array`, `GeneratorFunction`,  // `Number`, `String`, `Boolean` or `MyCustomClass`  const className = value.constructor.name;  if (typeof className === "string" && className !== "") {    return className;  }  // At this point there's no robust way to get the type of value,  // so we use the base implementation.  return baseType;}

Um potenziell nicht existierende Variablen zu prüfen, die ansonsten einenReferenceError auslösen würden, verwenden Sietypeof nonExistentVar === "undefined", da dieses Verhalten nicht mit benutzerdefiniertem Code nachgeahmt werden kann.

Spezifikationen

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

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp