Temporal.Duration.prototype.valueOf()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die valueOf()-Methode von Temporal.Duration-Instanzen löst einen TypeError aus, was verhindert, dass Temporal.Duration-Instanzen implizit in primitive Datentypen umgewandelt werden, wenn sie in arithmetischen oder Vergleichsoperationen verwendet werden.
Syntax
valueOf()
Parameter
Keine.
Rückgabewert
Keine.
Ausnahmen
TypeError-
Wird immer ausgelöst.
Beschreibung
Da sowohl die primitive Umwandlung als auch die Zahlenumwandlung valueOf() vor toString() aufrufen, würde bei Abwesenheit von valueOf() ein Ausdruck wie duration1 > duration2 sie implizit als Strings vergleichen, was zu unerwarteten Ergebnissen führen könnte, wie z.B. "PT3S" > "PT1M". Durch das Auslösen eines TypeError verhindern Temporal.Duration-Instanzen solche impliziten Umwandlungen. Sie müssen sie explizit in Zahlen konvertieren, indem Sie Temporal.Duration.prototype.total() verwenden, oder Sie verwenden die statische Methode Temporal.Duration.compare(), um sie zu vergleichen.
Beispiele
>Arithmetische und Vergleichsoperationen auf Temporal.Duration
Alle arithmetischen und Vergleichsoperationen auf Temporal.Duration-Instanzen sollten die dedizierten Methoden verwenden oder diese explizit in primitive Datentypen umwandeln.
const duration1 = Temporal.Duration.from({ seconds: 3 });
const duration2 = Temporal.Duration.from({ minutes: 1 });
duration1 > duration2; // TypeError: can't convert Duration to primitive type
duration1.total("seconds") > duration2.total("seconds"); // false
Temporal.Duration.compare(duration1, duration2); // -1
duration1 + duration2; // TypeError: can't convert Duration to primitive type
duration1.total("seconds") + duration2.total("seconds"); // 63
duration1.add(duration2).toString(); // "PT1M3S"
Spezifikationen
| Specification |
|---|
| Temporal> # sec-temporal.duration.prototype.valueof> |