Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Object.prototype.valueOf()
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.
DievalueOf()-Methode vonObject Instanzen konvertiert denthis Wertzu einem Objekt. Diese Methode soll von abgeleiteten Objekten für benutzerdefinierteTypumwandlungslogik überschrieben werden.
In diesem Artikel
Probieren Sie es aus
function MyNumberType(n) { this.number = n;}MyNumberType.prototype.valueOf = function () { return this.number;};const object = new MyNumberType(4);console.log(object + 3);// Expected output: 7Syntax
valueOf()Parameter
Keine.
Rückgabewert
Derthis Wert, konvertiert zu einem Objekt.
Hinweis:DamitvalueOf während der Typumwandlung nützlich ist, muss es einen primitiven Wert zurückgeben. Da alle primitiven Typen ihre eigenenvalueOf()-Methoden haben, ruft das Aufrufen vonprimitiveValue.valueOf() im Allgemeinen nichtObject.prototype.valueOf() auf.
Beschreibung
JavaScript ruft dievalueOf-Methode auf, umein Objekt in einen primitiven Wert zu konvertieren. Sie müssen dievalueOf-Methode selten selbst aufrufen; JavaScript ruft sie automatisch auf, wenn es auf ein Objekt stößt, wo ein primitiver Wert erwartet wird.
Diese Methode wird vorrangig vonnumerischer Konvertierung undprimitiver Konvertierung aufgerufen, aberString-Konvertierung ruft priorisierttoString() auf, undtoString() wird sehr wahrscheinlich einen String-Wert zurückgeben (selbst für dieObject.prototype.toString() Basisimplementierung), so dassvalueOf() in diesem Fall normalerweise nicht aufgerufen wird.
Alle Objekte, die vonObject.prototype erben (das heißt, alle außernull-Prototyp Objekten), erben dietoString()-Methode. DieObject.prototype.valueOf()-Basisimplementierung ist absichtlich nutzlos: Indem sie ein Objekt zurückgibt, wird ihr Rückgabewert niemals von einemPrimitive Conversion Algorithmus verwendet. Viele eingebaute Objekte überschreiben diese Methode, um einen geeigneten primitiven Wert zurückzugeben. Wenn Sie ein benutzerdefiniertes Objekt erstellen, können SievalueOf() überschreiben, um eine benutzerdefinierte Methode aufzurufen, damit Ihr benutzerdefiniertes Objekt in einen primitiven Wert umgewandelt werden kann. Im Allgemeinen wirdvalueOf() verwendet, um einen Wert zurückzugeben, der für das Objekt am bedeutungsvollsten ist — im Gegensatz zutoString(), muss es kein String sein. Alternativ können Sie eine[Symbol.toPrimitive]() Methode hinzufügen, die noch mehr Kontrolle über den Konvertierungsprozess erlaubt und immer gegenübervalueOf odertoString für jede Art von Typumwandlung bevorzugt wird.
Beispiele
>Verwendung von valueOf()
Die Basis-valueOf()-Methode gibt denthis-Wert selbst zurück, konvertiert in ein Objekt, falls es nicht bereits eins ist. Daher wird ihr Rückgabewert niemals von einem primitiven Konvertierungsalgorithmus verwendet.
const obj = { foo: 1 };console.log(obj.valueOf() === obj); // trueconsole.log(Object.prototype.valueOf.call("primitive"));// [String: 'primitive'] (a wrapper object)Überschreiben von valueOf für benutzerdefinierte Objekte
Sie können eine Funktion erstellen, die anstelle der Standard-valueOf-Methode aufgerufen wird. Ihre Funktion sollte keine Argumente annehmen, da sie bei der Typumwandlung keine erhalten wird.
Zum Beispiel können Sie einevalueOf-Methode zu Ihrer benutzerdefinierten KlasseBox hinzufügen.
class Box { #value; constructor(value) { this.#value = value; } valueOf() { return this.#value; }}Mit dem vorherigen Code wird jedes Mal, wenn ein Objekt vom TypBox in einem Kontext verwendet wird, in dem es als primitiver Wert (aber nicht speziell als String) dargestellt werden soll, die im vorherigen Code definierte Funktion automatisch von JavaScript aufgerufen.
const box = new Box(123);console.log(box + 456); // 579console.log(box == 123); // trueDievalueOf-Methode eines Objekts wird normalerweise von JavaScript aufgerufen, aber Sie können sie selbst wie folgt aufrufen:
box.valueOf();Verwendung des einstelligen Pluszeichens bei Objekten
Einseitiges Plus führtZahlenumwandlung auf seinem Operanden durch, was bei den meisten Objekten ohne[Symbol.toPrimitive]() bedeutet, dass dessenvalueOf() aufgerufen wird. Wenn jedoch das Objekt keine benutzerdefiniertevalueOf()-Methode hat, wird es von der Basisimplementierung ignoriert und stattdessen der Rückgabewert vontoString() verwendet.
+new Date(); // the current timestamp; same as new Date().getTime()+{}; // NaN (toString() returns "[object Object]")+[]; // 0 (toString() returns an empty string list)+[1]; // 1 (toString() returns "1")+[1, 2]; // NaN (toString() returns "1,2")+new Set([1]); // NaN (toString() returns "[object Set]")+{ valueOf: () => 42 }; // 42Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.prototype.valueof> |