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 valueOf()
Methode der Object
Instanzen konvertiert den this
Wert in ein Objekt. Diese Methode ist dafür gedacht, von abgeleiteten Objekten für benutzerdefinierte Typkonvertierungslogik überschrieben zu werden.
Probieren Sie es aus
function MyNumberType(n) {
this.number = n;
}
MyNumberType.prototype.valueOf = function () {
return this.number;
};
const object1 = new MyNumberType(4);
console.log(object1 + 3);
// Expected output: 7
Syntax
valueOf()
Parameter
Keine.
Rückgabewert
Der this
Wert, der in ein Objekt konvertiert wird.
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 das Aufrufen von aPrimitiveValue.valueOf()
im Allgemeinen nicht Object.prototype.valueOf()
auf.
Beschreibung
JavaScript ruft die Methode valueOf
auf, um ein Objekt in einen primitiven Wert zu konvertieren. Sie müssen die Methode valueOf
selten selbst aufrufen; JavaScript ruft sie automatisch auf, wenn ein Objekt vorliegt, wo ein primitiver Wert erwartet wird.
Diese Methode wird vorrangig bei numerischer Konvertierung und primitiver Konvertierung aufgerufen, aber bei Zeichenfolgenkonvertierung wird vorrangig toString()
aufgerufen, und toString()
gibt sehr wahrscheinlich einen Zeichenfolgenwert zurück (selbst bei der Object.prototype.toString()
Basisimplementierung), sodass valueOf()
in diesem Fall normalerweise nicht aufgerufen wird.
Alle Objekte, die von Object.prototype
erben (das heißt alle außer Objekten mit null
-Prototyp), erben die Methode toString()
. Die Basisimplementierung von Object.prototype.valueOf()
ist absichtlich nutzlos: Indem sie ein Objekt zurückgibt, wird ihr Rückgabewert nie von einem Algorithmus zur primitiven Konvertierung verwendet. Viele eingebaute Objekte überschreiben diese Methode, um einen geeigneten primitiven Wert zurückzugeben. Wenn Sie ein benutzerdefiniertes Objekt erstellen, können Sie valueOf()
überschreiben, um eine benutzerdefinierte Methode aufzurufen, sodass Ihr benutzerdefiniertes Objekt in einen primitiven Wert konvertiert werden kann. Im Allgemeinen wird valueOf()
verwendet, um einen Wert zurückzugeben, der für das Objekt am aussagekräftigsten ist — anders als toString()
, muss es sich dabei nicht um eine Zeichenkette handeln. Alternativ können Sie eine Methode [Symbol.toPrimitive]()
hinzufügen, die noch mehr Kontrolle über den Konvertierungsprozess erlaubt und immer gegenüber valueOf
oder toString
bei jeder Typkonvertierung bevorzugt wird.
Beispiele
Verwendung von valueOf()
Die Basis valueOf()
Methode gibt den this
Wert selbst zurück, in ein Objekt konvertiert, falls es noch keines ist. Daher wird ihr Rückgabewert nie von einem Algorithmus zur primitiven Konvertierung 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 beim Aufruf während der Typkonvertierung keine erhält.
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 vorhergehenden Code wird jedes Mal, wenn ein Objekt vom Typ Box
in einem Kontext verwendet wird, in dem es als primitiver Wert (aber nicht speziell als Zeichenfolge) dargestellt werden soll, die im vorhergehenden 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 in der Regel von JavaScript aufgerufen, aber Sie können sie selbst wie folgt aufrufen:
box.valueOf();
Verwendung des unären Plus auf Objekten
Unäres Plus führt eine Zahlenkonvertierung auf seinen Operanden durch, was für die meisten Objekte ohne [Symbol.toPrimitive]()
bedeutet, dass valueOf()
aufgerufen wird. Hat das Objekt jedoch keine benutzerdefinierte valueOf()
Methode, wird die Basisimplementierung dazu führen, 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® 2025 Language Specification # sec-object.prototype.valueof |