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 July 2015.
Die Methode valueOf()
von Object
Instanzen konvertiert den this
Wert in ein Objekt. Diese Methode soll von abgeleiteten Objekten für benutzerdefinierte Typkonvertierungslogik überschrieben werden.
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: 7
Syntax
valueOf()
Parameter
Keine.
Rückgabewert
Der this
Wert, in ein Objekt konvertiert.
Hinweis:
Damit valueOf
während der Typkonvertierung nützlich ist, muss es einen primitiven Wert zurückgeben. Da alle primitiven Typen ihre eigenen valueOf()
Methoden haben, ruft ein Aufruf von aPrimitiveValue.valueOf()
im Allgemeinen nicht Object.prototype.valueOf()
auf.
Beschreibung
JavaScript ruft die valueOf
Methode auf, um ein Objekt in einen primitiven Wert zu konvertieren. Sie müssen die valueOf
Methode selten selbst aufrufen; JavaScript ruft sie automatisch auf, wenn ein Objekt an einer Stelle erwartet wird, an der ein primitiver Wert erwartet wird.
Diese Methode wird vorrangig bei der numerischen Konvertierung und primitiven Konvertierung verwendet, aber Zeichenkettenkonvertierung ruft prioritär toString()
auf, und toString()
wird sehr wahrscheinlich einen Zeichenkettenwert zurückgeben (selbst bei der Grundimplementierung von Object.prototype.toString()
), sodass valueOf()
in diesem Fall normalerweise nicht aufgerufen wird.
Alle Objekte, die von Object.prototype
erben (das heißt alle, außer null
-Prototyp-Objekte), erben die toString()
Methode. Die Grundimplementierung von Object.prototype.valueOf()
ist absichtlich nutzlos: Durch die Rückgabe eines Objekts wird sein Rückgabewert niemals von einem Algorithmus zur primitiven Konvertierung verwendet. Viele eingebaute Objekte überschreiben diese Methode, um einen passenden primitiven Wert zurückzugeben. Wenn Sie ein benutzerdefiniertes Objekt erstellen, können Sie valueOf()
überschreiben, um eine benutzerdefinierte Methode aufzurufen, damit Ihr benutzerdefiniertes Objekt in einen primitiven Wert umgewandelt werden kann. Im Allgemeinen wird valueOf()
verwendet, um einen Wert zurückzugeben, der am sinnvollsten für das Objekt ist — im Gegensatz zu toString()
muss es sich dabei nicht um eine Zeichenkette handeln. Alternativ können Sie eine [Symbol.toPrimitive]()
Methode hinzufügen, die noch mehr Kontrolle über den Konvertierungsprozess ermöglicht und bei jeder Typkonvertierung immer valueOf
oder toString
vorgezogen wird.
Beispiele
Verwendung von valueOf()
Die Grundmethode valueOf()
gibt den this
-Wert selbst zurück, in ein Objekt umgewandelt, falls es nicht bereits ein Objekt ist. Daher wird ihr Rückgabewert niemals von einem primitiven Konvertierungsalgorithmus verwendet.
const obj = { foo: 1 };
console.log(obj.valueOf() === obj); // true
console.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 Standardmethode valueOf
aufgerufen wird. Ihre Funktion sollte keine Argumente annehmen, da sie während der Typkonvertierung keine übergeben bekommt.
Zum Beispiel können Sie eine valueOf
Methode zu Ihrer benutzerdefinierten Klasse Box
hinzufügen.
class Box {
#value;
constructor(value) {
this.#value = value;
}
valueOf() {
return this.#value;
}
}
Mit dem obigen Code wird jedes Mal, wenn ein Objekt des Typs Box
in einem Kontext verwendet wird, in dem es als ein primitiver Wert (aber nicht spezifisch als eine Zeichenkette) dargestellt werden soll, die im obigen Code definierte Funktion automatisch von JavaScript aufgerufen.
const box = new Box(123);
console.log(box + 456); // 579
console.log(box == 123); // true
Die valueOf
Methode eines Objekts wird normalerweise von JavaScript aufgerufen, aber Sie können sie auch selbst aufrufen:
box.valueOf();
Verwenden des unären Plus auf Objekten
Unäres Plus führt eine Zahlenkonvertierung auf seinem Operanden durch, was bedeutet, dass bei den meisten Objekten ohne [Symbol.toPrimitive]()
deren valueOf()
aufgerufen wird. Hat das Objekt jedoch keine benutzerdefinierte valueOf()
Methode, führt die Grundimplementierung dazu, dass valueOf()
ignoriert wird und stattdessen der Rückgabewert von toString()
verwendet wird.
+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 }; // 42
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-object.prototype.valueof |