| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Data_structures#null_type | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
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.
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:
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.
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.
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.
Der Null-Typ wird von genau einem Wert bewohnt: null.
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:
return-Anweisung ohne Wert (return;) gibt implizit undefined zurck.obj.iDontExist) gibt undefined zurck.let x;) initialisiert die Variable implizit mit undefined.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.
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.
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:
Number.MAX_VALUE sind, werden in Infinity konvertiert.Number.MIN_VALUE sind, werden zu 0 konvertiert.Number.MAX_VALUE sind, werden in -Infinity konvertiert.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:
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.
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:
// 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.
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:
substring().+) oder concat().Es kann verlockend sein, Strings zu verwenden, um komplexe Daten darzustellen. Dies bringt kurzfristige Vorteile mit sich:
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.
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.
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.
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-Eigenschaften verknpfen einen Schlssel mit einem Wert. Sie kann durch die folgenden Attribute beschrieben werden:
valueDer Wert, der durch einen Zugriff auf die Eigenschaft abgerufen wird. Kann jeder JavaScript-Wert sein.
writableEin Boolescher Wert, der angibt, ob die Eigenschaft durch eine Zuweisung verndert werden kann.
enumerableEin 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.
configurableEin Boolescher Wert, der angibt, ob die Eigenschaft gelscht werden kann, in eine Zugangs-Eigenschaft gendert werden kann und ob ihre Attribute gendert werden knnen.
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:
getEine 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.
setEine 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.
enumerableEin 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.
configurableEin 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.
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.
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.
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.
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.
JavaScript hat eine Standardbibliothek von eingebauten Objekten. Lesen Sie die Referenz, um mehr ber die eingebauten Objekte zu erfahren.
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.
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:
Date()-Konstruktor, wenn er ein Argument erhlt, das keine Date-Instanz ist Strings reprsentieren Date-Strings, whrend Zahlen Zeitstempel reprsentieren.+-Operator wenn einer der Operanden ein String ist, wird String-Verkettung durchgefhrt; ansonsten wird numerische Addition durchgefhrt.==-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:
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.
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.
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:
[Symbol.toPrimitive]("default") valueOf() toString()[Symbol.toPrimitive]("number") valueOf() toString()[Symbol.toPrimitive]("string") toString() valueOf()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.
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |