[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Data_structures#number_type [Back]  [Original]

JavaScript-Datentypen und Datenstrukturen - JavaScript | MDN

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

View in English Always switch to English

JavaScript-Datentypen und Datenstrukturen

Alle Programmiersprachen haben eingebaute Datenstrukturen, aber diese unterscheiden sich oft von einer Sprache zur anderen. Dieser Artikel versucht, die eingebauten Datenstrukturen in JavaScript aufzulisten und ihre Eigenschaften zu beschreiben. Diese knnen genutzt werden, um andere Datenstrukturen zu erstellen.

Das Sprachenberblick bietet eine hnliche Zusammenfassung der allgemeinen Datentypen, jedoch mit mehr Vergleichen zu anderen Sprachen.

In diesem Artikel

Dynamische und schwache Typisierung

JavaScript ist eine dynamische Sprache mit dynamischen Typen. Variablen in JavaScript sind nicht direkt mit einem bestimmten Werttyp verknpft und jede Variable kann Werte aller Typen zugewiesen (und neu zugewiesen) bekommen:

js
let foo = 42; // foo is now a number
foo = "bar"; // foo is now a string
foo = true; // foo is now a boolean

JavaScript ist auch eine schwach typisierte Sprache, was bedeutet, dass es eine implizite Typkonvertierung zulsst, wenn eine Operation unpassende Typen beinhaltet, anstatt Typfehler zu werfen.

js
const foo = 42; // foo is a number
const result = foo + "1"; // JavaScript coerces foo to a string, so it can be concatenated with the other operand
console.log(result); // 421

Implizite Umwandlungen sind sehr praktisch, knnen aber subtile Fehler erzeugen, wenn Konvertierungen dort stattfinden, wo sie nicht erwartet werden, oder wo sie in die andere Richtung erwartet werden (zum Beispiel, von Zeichenfolge zu Zahl anstatt von Zahl zu Zeichenfolge). Fr Symbole und BigInts hat JavaScript bewusst bestimmte implizite Typkonvertierungen verboten.

Primitive Werte

Alle Typen auer Object definieren unvernderliche Werte, die direkt auf der untersten Ebene der Sprache dargestellt werden. Wir bezeichnen Werte dieser Typen als primitive Werte.

Alle primitiven Typen, auer null, knnen mit dem typeof-Operator getestet werden. typeof null gibt "object" zurck, daher muss man === null verwenden, um null zu testen.

Alle primitiven Typen, auer null und undefined, haben ihre entsprechenden Objekt-Wrapper-Typen, die ntzliche Methoden zum Arbeiten mit den primitiven Werten bereitstellen. Zum Beispiel bietet das Number-Objekt Methoden wie toExponential(). Wenn auf eine Eigenschaft eines primitiven Wertes zugegriffen wird, umhllt JavaScript den Wert automatisch in das entsprechende Wrapper-Objekt und greift stattdessen auf die Eigenschaft im Objekt zu. Allerdings wirft der Zugriff auf eine Eigenschaft von null oder undefined eine TypeError-Exception, was die Einfhrung des optionalen Verkettungsoperators erforderlich macht.

Typ typeof Rckgabewert Objekt-Wrapper
Null "object" N/V
Undefined "undefined" N/V
Boolean "boolean" Boolean
Number "number" Number
BigInt "bigint" BigInt
String "string" String
Symbol "symbol" Symbol

Die Referenzseiten der Objekt-Wrapper-Klassen enthalten mehr Informationen ber die verfgbaren Methoden und Eigenschaften fr jeden Typ sowie detaillierte Beschreibungen der Semantik der primitiven Typen selbst.

Null-Typ

Der Null-Typ wird von genau einem Wert bewohnt: null.

Undefined-Typ

Der Undefined-Typ wird von genau einem Wert bewohnt: undefined.

Konzeptionell zeigt undefined das Fehlen eines Wertes an, whrend null das Fehlen eines Objekts anzeigt (was auch eine Erklrung fr typeof null === "object" sein knnte). Die Sprache setzt meistens auf undefined, wenn etwas keinen Wert hat:

  • Eine return-Anweisung ohne Wert (return;) gibt implizit undefined zurck.
  • Der Zugriff auf eine nicht existente Objekt-Eigenschaft (obj.iDontExist) gibt undefined zurck.
  • Eine Variablendeklaration ohne Initialisierung (let x;) initialisiert die Variable implizit mit undefined.
  • Viele Methoden, wie Array.prototype.find() und Map.prototype.get(), geben undefined zurck, wenn kein Element gefunden wird.

null wird in der Kernsprache viel seltener verwendet. Der wichtigste Ort ist das Ende der Prototypenkette dementsprechend akzeptieren oder geben Methoden, die mit Prototypen interagieren, wie Object.getPrototypeOf(), Object.create() usw., null anstelle von undefined zurck.

null ist ein Schlsselwort, aber undefined ist ein normales Identifier, das zufllig eine globale Eigenschaft ist. In der Praxis ist der Unterschied gering, da undefined nicht neu definiert oder berschattet werden sollte.

Boolean-Typ

Der Boolean-Typ reprsentiert eine logische Entitt und wird von zwei Werten bewohnt: true und false.

Boolesche Werte werden normalerweise fr bedingte Operationen verwendet, einschlielich ternrem Operator, if...else, while usw.

Number-Typ

Der Number-Typ ist ein doppelter 64-Bit-Gleitkommawert im IEEE 754-Format. Er ist in der Lage, positive Gleitkommazahlen zwischen 2-1074 (Number.MIN_VALUE) und 21023 (2 - 2-52) (Number.MAX_VALUE) sowie negative Gleitkommazahlen desselben Umfangs zu speichern, kann jedoch nur ganze Zahlen im Bereich von -(253 1) (Number.MIN_SAFE_INTEGER) bis 253 1 (Number.MAX_SAFE_INTEGER) sicher speichern. Auerhalb dieses Bereichs kann JavaScript ganze Zahlen nicht mehr sicher darstellen; stattdessen werden sie durch eine Gleitzahl-Doppelformat-Angleichung dargestellt. Sie knnen berprfen, ob eine Zahl innerhalb des Bereichs der sicheren Ganzzahlen liegt, indem Sie Number.isSafeInteger() verwenden.

Werte auerhalb des darstellbaren Bereichs werden automatisch konvertiert:

  • Positive Werte, die grer als Number.MAX_VALUE sind, werden in Infinity konvertiert.
  • Positive Werte, die kleiner als Number.MIN_VALUE sind, werden zu 0 konvertiert.
  • Negative Werte, die kleiner als -Number.MAX_VALUE sind, werden in -Infinity konvertiert.
  • Negative Werte, die grer als -Number.MIN_VALUE sind, werden zu -0 konvertiert.

Infinity und -Infinity verhalten sich hnlich wie mathematische Unendlichkeit, jedoch mit einigen geringfgigen Unterschieden; sehen Sie die Seiten Number.POSITIVE_INFINITY und Number.NEGATIVE_INFINITY fr Details.

Der Number-Typ hat nur einen Wert mit mehreren Darstellungen: 0 wird sowohl als -0 als auch als +0 (wobei 0 ein Alias fr +0 ist) dargestellt. In der Praxis gibt es fast keinen Unterschied zwischen den verschiedenen Darstellungen; zum Beispiel ist +0 === -0 true. Sie knnen dies jedoch bemerken, wenn Sie durch null teilen:

js
console.log(42 / +0); // Infinity
console.log(42 / -0); // -Infinity

NaN ("Nicht eine Zahl") ist eine spezielle Art von Zahlenwert, der typischerweise vorkommt, wenn das Ergebnis einer arithmetischen Operation nicht als Zahl ausgedrckt werden kann. Es ist auch der einzige Wert in JavaScript, der nicht sich selbst entspricht.

Obwohl eine Zahl konzeptionell ein "mathematischer Wert" ist und immer implizit als Gleitkommazahl kodiert ist, stellt JavaScript Bitweise Operatoren bereit. Bei der Anwendung von bitweisen Operatoren wird die Zahl zunchst in eine 32-Bit-Ganzzahl konvertiert.

Hinweis: Auch wenn bitweise Operatoren genutzt werden knnen, um mehrere Boolesche Werte innerhalb einer einzelnen Zahl mittels Bitmaskierung darzustellen, wird dies in der Regel als schlechte Praxis angesehen. JavaScript bietet andere Mittel, um eine Menge von Booleschen Werten darzustellen (wie ein Array von Booleschen Werten oder ein Objekt mit Booleschen Werten, die auf benannte Eigenschaften zugewiesen sind). Die Bitmaskierung neigt auch dazu, den Code schwerer lesbar, verstndlich und wartbar zu machen.

Es kann notwendig sein, solche Techniken in sehr eingeschrnkten Umgebungen zu verwenden, wie zum Beispiel beim Umgang mit den Einschrnkungen des lokalen Speichers oder in extremen Fllen (wie wenn jedes Bit ber das Netzwerk zhlt). Diese Technik sollte nur in Betracht gezogen werden, wenn sie das letzte Mittel ist, das ergriffen werden kann, um die Gre zu optimieren.

BigInt-Typ

Der BigInt-Typ ist ein numerischer primitiver Typ in JavaScript, der Ganzzahlen beliebiger Gre darstellen kann. Mit BigInts knnen Sie groe Ganzzahlen sicher speichern und bearbeiten, selbst ber die Grenze der sicheren Ganzzahl hinaus (Number.MAX_SAFE_INTEGER) fr Nummern.

Ein BigInt wird erstellt, indem man n an das Ende einer Ganzzahl anhngt oder indem man die BigInt()-Funktion aufruft.

Dieses Beispiel zeigt, wo das Erhhen der Number.MAX_SAFE_INTEGER das erwartete Ergebnis liefert:

js
// BigInt
const x = BigInt(Number.MAX_SAFE_INTEGER); // 9007199254740991n
x + 1n === x + 2n; // false because 9007199254740992n and 9007199254740993n are unequal

// Number
Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2; // true because both are 9007199254740992

Sie knnen die meisten Operatoren verwenden, um mit BigInts zu arbeiten, einschlielich +, *, -, ** und % der einzige verbotene ist >>>. Ein BigInt ist nicht streng gleich einer Zahl mit demselben mathematischen Wert, ist jedoch lose so.

BigInt-Werte sind weder immer prziser noch immer weniger przise als Zahlen, da BigInts keine Bruchzahlen darstellen knnen, aber groe Ganzzahlen genauer darstellen knnen. Kein Typ schliet den anderen ein, und sie sind nicht gegenseitig austauschbar. Ein TypeError wird ausgelst, wenn BigInt-Werte mit regulren Zahlen in arithmetischen Ausdrcken gemischt werden, oder wenn sie implizit konvertiert werden.

String-Typ

Der String-Typ stellt Textdaten dar und ist als eine Folge von 16-Bit-unsigned Integer-Werten kodiert, die UTF-16 Code-Einheiten darstellen. Jedes Element im String nimmt eine Position im String ein. Das erste Element befindet sich an Index 0, das nchste an Index 1 usw. Die Lnge eines Strings ist die Anzahl der UTF-16 Code-Einheiten darin, welche mglicherweise nicht der tatschlichen Anzahl der Unicode-Zeichen entsprechen; siehe die String Referenzseite fr mehr Details.

JavaScript-Strings sind unvernderlich. Das bedeutet, dass es nicht mglich ist, einen String nach seiner Erstellung zu ndern. String-Methoden erzeugen neue Strings basierend auf dem Inhalt des aktuellen Strings zum Beispiel:

  • Ein Teilstring des Originalstrings mithilfe von substring().
  • Eine Verkettung zweier Strings mittels des Verkettungsoperators (+) oder concat().

Vorsicht vor dem "stringly-typing" Ihres Codes!

Es kann verlockend sein, Strings zu verwenden, um komplexe Daten darzustellen. Dies bringt kurzfristige Vorteile mit sich:

  • Es ist einfach, komplexe Strings mit Verkettung zu erstellen.
  • Strings sind leicht debugbar (das, was Sie sehen, wird immer im String sein).
  • Strings sind der kleinste gemeinsame Nenner vieler APIs (Eingabefelder, Werte im lokalen Speicher, fetch()-Antworten, wenn Response.text() verwendet wird, etc.) und es kann verlockend sein, nur mit Strings zu arbeiten.

Mit Konventionen ist es mglich, jede Datenstruktur in einem String zu reprsentieren. Das macht es nicht zu einer guten Idee. Zum Beispiel knnte man mit einem Separator eine Liste emulieren (whrend ein JavaScript-Array besser geeignet wre). Leider ist, wenn der Separator in einem der "Listen"-Elemente verwendet wird, die Liste zerstrt. Ein Escape-Zeichen kann gewhlt werden, etc. All dies erfordert Konventionen und schafft eine unntige Wartungslast.

Verwenden Sie Strings fr Textdaten. Bei der Darstellung komplexer Daten, parsen Sie Strings und verwenden Sie die passende Abstraktion.

Symbol-Typ

Ein Symbol ist ein einzigartiger und unvernderlicher primitiver Wert und kann als Schlssel einer Objekteigenschaft verwendet werden (siehe unten). In einigen Programmiersprachen werden Symbole als "Atom" bezeichnet. Zweck der Symbole ist es, einzigartige Eigenschaftsschlssel zu erstellen, die garantiert nicht mit Schlsseln aus anderem Code kollidieren.

Objekte

In der Informatik ist ein Objekt ein Wert im Speicher, der mglicherweise von einem Identifier referenziert wird. In JavaScript sind Objekte die einzigen vernderlichen Werte. Funktionen sind tatschlich auch Objekte mit der zustzlichen Fhigkeit, aufrufbar zu sein.

Eigenschaften

In JavaScript knnen Objekte als eine Sammlung von Eigenschaften betrachtet werden. Mit der Objektliteral-Syntax wird eine begrenzte Menge an Eigenschaften initialisiert; danach knnen Eigenschaften hinzugefgt und entfernt werden. Eigenschaften von Objekten sind gleichwertig mit Schlssel-Wert-Paaren. Eigenschaftsschlssel sind entweder Strings oder Symbole. Wenn andere Typen (wie Zahlen) verwendet werden, um Objekte zu indizieren, werden die Werte implizit in Strings konvertiert. Eigenschaftswerte knnen Werte jeden Typs sein, einschlielich anderer Objekte, was es ermglicht, komplexe Datenstrukturen zu erstellen.

Es gibt zwei Typen von Objekteigenschaften: Die Daten-Eigenschaft und die Zugangs-Eigenschaft. Jede Eigenschaft hat entsprechende Attribute. Jedes Attribut wird intern von der JavaScript-Engine abgerufen, aber Sie knnen sie durch Object.defineProperty() setzen oder durch Object.getOwnPropertyDescriptor() ablesen. Weitere Informationen zu den verschiedenen Nuancen finden Sie auf der Seite Object.defineProperty().

Daten-Eigenschaft

Daten-Eigenschaften verknpfen einen Schlssel mit einem Wert. Sie kann durch die folgenden Attribute beschrieben werden:

value

Der Wert, der durch einen Zugriff auf die Eigenschaft abgerufen wird. Kann jeder JavaScript-Wert sein.

writable

Ein Boolescher Wert, der angibt, ob die Eigenschaft durch eine Zuweisung verndert werden kann.

enumerable

Ein Boolescher Wert, der angibt, ob die Eigenschaft durch eine for...in-Schleife aufgezhlt werden kann. Siehe auch Aufzhlbarkeit und Eigentum von Eigenschaften fr Informationen darber, wie Aufzhlbarkeit mit anderen Funktionen und Syntaxen interagiert.

configurable

Ein Boolescher Wert, der angibt, ob die Eigenschaft gelscht werden kann, in eine Zugangs-Eigenschaft gendert werden kann und ob ihre Attribute gendert werden knnen.

Zugangs-Eigenschaft

Verknpft einen Schlssel mit einer von zwei Zugriffs-Funktionen (get und set), um einen Wert abzurufen oder zu speichern.

Hinweis: Es ist wichtig, zu erkennen, dass es sich um eine Zugangs-Eigenschaft handelt, nicht um eine Zugangs-Methode. Wir knnen einem JavaScript-Objekt klassenhnliche Zugnge geben, indem wir eine Funktion als Wert verwenden das macht das Objekt jedoch nicht zu einer Klasse.

Eine Zugangs-Eigenschaft hat die folgenden Attribute:

get

Eine Funktion, die mit einer leeren Argumentliste aufgerufen wird, um den Eigenschaftswert abzurufen, wann immer ein Zugriff auf den Wert erfolgt. Siehe auch Getter. Kann undefined sein.

set

Eine Funktion, die mit einem Argument aufgerufen wird, das den zugewiesenen Wert enthlt. Wird ausgefhrt, wenn eine bestimmte Eigenschaft verwechselt werden soll. Siehe auch Setter. Kann undefined sein.

enumerable

Ein Boolescher Wert, der angibt, ob die Eigenschaft durch eine for...in-Schleife aufgezhlt werden kann. Siehe auch Aufzhlbarkeit und Eigentum von Eigenschaften fr Informationen darber, wie Aufzhlbarkeit mit anderen Funktionen und Syntaxen interagiert.

configurable

Ein Boolescher Wert, der angibt, ob die Eigenschaft gelscht werden kann, in eine Daten-Eigenschaft gendert werden kann und ob ihre Attribute gendert werden knnen.

Das Prototype eines Objekts zeigt auf ein anderes Objekt oder auf null es ist konzeptionell eine versteckte Eigenschaft des Objekts, die blicherweise als [[Prototype]] dargestellt wird. Eigenschaften des Objekts [[Prototype]] knnen auch auf das Objekt selbst zugreifen.

Objekte sind zusammengewrfelte Schlssel-Wert-Paare, weshalb sie oft als Maps verwendet werden. Dies kann jedoch Ergonomie-, Sicherheits- und Leistungsprobleme verursachen. Verwenden Sie stattdessen eine Map, um beliebige Daten zu speichern. Die Map-Referenz enthlt eine detailliertere Diskussion der Vor- und Nachteile zwischen einfachen Objekten und Maps zum Speichern von Schlssel-Wert-Assoziationen.

Datum

JavaScript bietet zwei Sets von APIs zur Darstellung von Daten: das veraltete Date Objekt und das moderne Temporal Objekt. Date weist viele unerwnschte Designentscheidungen auf und sollte, wenn mglich, in neuem Code vermieden werden.

Indizierte Sammlungen: Arrays und Typisierte Arrays

Arrays sind regulre Objekte, bei denen es eine besondere Beziehung zwischen Ganzzahlschlsseleigenschaften und der length-Eigenschaft gibt.

Darber hinaus erben Arrays von Array.prototype, das eine Reihe ntzlicher Methoden zur Manipulation von Arrays bietet. Zum Beispiel sucht indexOf() einen Wert im Array und push() hngt ein Element an das Array an. Dies macht Arrays zu einer perfekten Wahl, um geordnete Listen darzustellen.

Typisierte Arrays stellen eine arrayhnliche Ansicht eines zugrunde liegenden binren Datenpuffers dar und bieten viele Methoden, die hnliche Semantiken wie die Array-Gegenstcke haben. "Typisiertes Array" ist ein Oberbegriff fr eine Reihe von Datenstrukturen, einschlielich Int8Array, Float32Array usw. Sehen Sie die typisierte Array Seite fr mehr Informationen. Typisierte Arrays werden oft in Verbindung mit ArrayBuffer und DataView verwendet.

Keyed-Sammlungen: Maps, Sets, WeakMaps, WeakSets

Diese Datenstrukturen nehmen Objekt-Referenzen als Schlssel. Set und WeakSet reprsentieren eine Sammlung einzigartiger Werte, whrend Map und WeakMap eine Sammlung von Schlssel-Wert-Zuordnungen darstellen.

Sie knnten Maps und Sets selbst implementieren. Da jedoch Objekte nicht vergleichbar sind (im Sinne von "<" "weniger als", zum Beispiel), und die Engine ihre Hash-Funktion fr Objekte nicht offenlegt, wre die Suchleistung zwangslufig linear. Native Implementierungen davon (einschlielich WeakMaps) knnen Suchleistungen bieten, die ungefhr logarithmisch bis konstant sind.

blicherweise, um Daten an einen DOM-Knoten zu binden, knnte man Eigenschaften direkt am Objekt setzen oder data-* Attribute verwenden. Der Nachteil davon ist, dass die Daten fr jedes Skript im gleichen Kontext verfgbar sind. Maps und WeakMaps machen es einfach, privat Daten an ein Objekt zu binden.

WeakMap und WeakSet erlauben nur als Schlssel speicherbereinigbare Werte, die entweder Objekte oder nicht registrierte Symbole sind, und die Schlssel knnen auch dann gesammelt werden, wenn sie in der Sammlung verbleiben. Sie werden speziell zur Optimierung des Speicherverbrauchs verwendet.

Strukturierte Daten: JSON

JSON (JavaScript Objekt Notation) ist ein leichtgewichtiges Datenaustauschformat, das von JavaScript abgeleitet wurde, aber von vielen Programmiersprachen verwendet wird. JSON erstellt universelle Datenstrukturen, die zwischen verschiedenen Umgebungen und sogar zwischen Sprachen bertragen werden knnen. Sehen Sie JSON fr mehr Details.

Weitere Objekte in der Standardbibliothek

JavaScript hat eine Standardbibliothek von eingebauten Objekten. Lesen Sie die Referenz, um mehr ber die eingebauten Objekte zu erfahren.

Typumwandlungen

Wie oben erwhnt, ist JavaScript eine schwach typisierte Sprache. Das bedeutet, dass Sie oft einen Wert eines Typs verwenden knnen, wo ein anderer Typ erwartet wird, und die Sprache ihn fr Sie in den richtigen Typ konvertiert. Dazu definiert JavaScript eine Handvoll Umwandlungsregeln.

Primitive Umwandlung

Der Prozess der primitiven Umwandlung wird verwendet, wenn ein primitiver Wert erwartet wird, aber es keine starke Prferenz dafr gibt, welcher tatschliche Typ es sein sollte. Dies ist normalerweise der Fall, wenn ein String, eine Zahl oder ein BigInt gleichermaen akzeptabel sind. Zum Beispiel:

  • Der Date()-Konstruktor, wenn er ein Argument erhlt, das keine Date-Instanz ist Strings reprsentieren Date-Strings, whrend Zahlen Zeitstempel reprsentieren.
  • Der +-Operator wenn einer der Operanden ein String ist, wird String-Verkettung durchgefhrt; ansonsten wird numerische Addition durchgefhrt.
  • Der ==-Operator wenn ein Operand ein primitiver Wert ist, whrend der andere ein Objekt ist, wird das Objekt in einen primitiven Wert konvertiert, ohne einen bevorzugten Typ zu haben.

Diese Operation fhrt keine Konvertierung durch, wenn der Wert bereits ein primitiver Wert ist. Objekte werden durch Aufrufen ihrer [Symbol.toPrimitive]() (mit "default" als Hinweis), valueOf(), und toString()-Methoden, in dieser Reihenfolge, in primitive Werte konvertiert. Beachten Sie, dass die primitive Konvertierung valueOf() vor toString() aufruft, was dem Verhalten der Zahlenumwandlung hnlich ist, aber sich von der String-Umwandlung unterscheidet.

Die [Symbol.toPrimitive]()-Methode, falls vorhanden, muss einen primitiven Wert zurckgeben das Zurckgeben eines Objektes fhrt zu einem TypeError. Fr valueOf() und toString(), wenn eine ein Objekt zurckgibt, wird der Rckgabewert ignoriert und der Rckgabewert der anderen verwendet; wenn keine vorhanden ist oder keine einen primitiven Wert zurckgibt, wird ein TypeError ausgelst. Zum Beispiel, im folgenden Code:

js
console.log({} + []); // "[object Object]"

Sowohl {} als auch [] haben keine [Symbol.toPrimitive]()-Methode. Beide erben valueOf() von Object.prototype.valueOf, das das Objekt selbst zurckgibt. Da der Rckgabewert ein Objekt ist, wird er ignoriert. Daher wird stattdessen toString() aufgerufen. {}.toString() gibt "[object Object]" zurck, whrend [].toString() "" zurckgibt, so dass das Ergebnis ihre Verkettung ist: "[object Object]".

Die [Symbol.toPrimitive]()-Methode hat immer Vorrang bei der Umwandlung in jeden primitiven Typ. Primitive Umwandlung verhlt sich allgemein wie die Zahlenumwandlung, da valueOf() Vorrang hat; jedoch knnen Objekte mit benutzerdefinierten [Symbol.toPrimitive]()-Methoden whlen, um beliebige Primitive zurckzugeben. Date und Symbol Objekte sind die einzigen eingebauten Objekte, die die [Symbol.toPrimitive]()-Methode berschreiben. Date.prototype[Symbol.toPrimitive]() behandelt den "default"-Hinweis, als ob es "string" wre, whrend Symbol.prototype[Symbol.toPrimitive]() den Hinweis ignoriert und immer ein Symbol zurckgibt.

Numerische Umwandlung

Es gibt zwei numerische Typen: Number und BigInt. Manchmal erwartet die Sprache speziell eine Zahl oder einen BigInt (wie Array.prototype.slice(), wo der Index eine Zahl sein muss); andere Male kann sie entweder tolerieren und unterschiedliche Operationen abhngig vom Typ des Operanden durchfhren. Fr strikte Umwandlungsprozesse, die keine implizite Konvertierung vom anderen Typ zulassen, siehe Zahlenumwandlung und BigInt-Umwandlung.

Numerische Umwandlung ist fast identisch mit der Zahlenumwandlung, auer dass BigInts als solche zurckgegeben werden, anstatt einen TypeError zu verursachen. Numerische Umwandlung wird von allen arithmetischen Operatoren verwendet, da sie sowohl fr Zahlen als auch fr BigInts berladen sind. Die einzige Ausnahme ist das unre Plus, das immer eine Zahlenumwandlung vornimmt.

Weitere Umwandlungen

Alle Datentypen, auer Null, Undefined und Symbol, haben ihren jeweiligen Umwandlungsprozess. Siehe String-Umwandlung, Boolean-Umwandlung, und Objektumwandlung fr mehr Details.

Wie Sie vielleicht bemerkt haben, gibt es drei unterschiedliche Wege, durch die Objekte in Primitive umgewandelt werden knnen:

In allen Fllen muss [Symbol.toPrimitive]() vorhanden und aufrufbar sein und einen primitiven Wert zurckgeben, whrend valueOf oder toString ignoriert werden, wenn sie nicht aufrufbar sind oder ein Objekt zurckgeben. Am Ende des Prozesses, wenn er erfolgreich ist, wird das Ergebnis garantiert ein primitiver Wert sein. Der resultierende primitive Wert wird dann in weiteren Umwandlungen je nach Kontext unterzogen.

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page