Baseline Widely available
Die valueOf()
-Methode von Object
-Instanzen wandelt den this
-Wert in ein Objekt um. Diese Methode soll von abgeleiteten Objekten für benutzerdefinierte Typkonvertierung überschrieben werden.
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 Parameter
Keine.
RückgabewertDer this
-Wert, in ein Objekt konvertiert.
Hinweis: Damit valueOf
bei der Typkonvertierung nützlich ist, muss es einen primitiven Wert zurückgeben. Da alle primitiven Typen ihre eigenen valueOf()
-Methoden haben, ruft der Aufruf von aPrimitiveValue.valueOf()
in der Regel nicht Object.prototype.valueOf()
auf.
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 anstelle eines primitiven Werts erwartet wird.
Diese Methode wird vorrangig bei der numerischen Konvertierung und primitiven Konvertierung aufgerufen, jedoch ruft die Zeichenfolgenkonvertierung toString()
vorrangig auf, und toString()
liefert sehr wahrscheinlich einen Zeichenfolgenwert zurück (sogar in der Object.prototype.toString()
-Basisimplementierung), so dass valueOf()
in diesem Fall normalerweise nicht aufgerufen wird.
Alle Objekte, die von Object.prototype
erben (d.h. alle auÃer null
-Prototyp-Objekten), erben die toString()
-Methode. Die Object.prototype.valueOf()
-Basisimplementierung ist bewusst nutzlos: Indem sie ein Objekt zurückgibt, wird ihr Rückgabewert niemals von einem primitiven Konvertierungsalgorithmus 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, so dass 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 sinnvollsten ist â im Gegensatz zu toString()
muss es kein String sein. Alternativ können Sie eine [Symbol.toPrimitive]()
-Methode hinzufügen, die noch mehr Kontrolle über den Konvertierungsprozess ermöglicht und immer gegenüber valueOf
oder toString
bei jeder Typkonvertierung bevorzugt wird.
Die Basis-valueOf()
-Methode gibt den this
-Wert selbst zurück, der in ein Objekt konvertiert wird, wenn er es noch nicht 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 Standard-valueOf
-Methode aufgerufen wird. Ihre Funktion sollte keine Argumente annehmen, da ihr keine übergeben werden, wenn sie während der Typkonvertierung aufgerufen wird.
Beispielsweise können Sie Ihrer benutzerdefinierten Klasse Box
eine valueOf
-Methode hinzufügen.
class Box {
#value;
constructor(value) {
this.#value = value;
}
valueOf() {
return this.#value;
}
}
Mit dem obigen Code wird jedes Mal, wenn ein Objekt vom Typ Box
in einem Kontext verwendet wird, in dem es als primitiver Wert dargestellt werden soll (aber nicht speziell als String), automatisch die im obigen Code definierte Funktion aufgerufen.
const box = new Box(123);
console.log(box + 456); // 579
console.log(box == 123); // true
Eine valueOf
-Methode eines Objekts wird in der Regel von JavaScript aufgerufen, aber Sie können sie auch selbst aufrufen, wie folgt:
Einstelliges Plus führt eine Zahlkonvertierung auf seinem Operanden durch, was bei den meisten Objekten ohne [Symbol.toPrimitive]()
bedeutet, dass valueOf()
aufgerufen wird. Hat das Objekt jedoch keine benutzerdefinierte valueOf()
-Methode, bewirkt die Basisimplementierung, dass valueOf()
ignoriert wird und der Rückgabewert von toString()
stattdessen 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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4