Temporal.Duration.prototype.valueOf()
En esta página
The valueOf() method of {{jsxref("Temporal.Duration")}} instances throws a {{jsxref("TypeError")}}, which prevents Temporal.Duration instances from being implicitly converted to primitives when used in arithmetic or comparison operations.
Syntax#
valueOf()
Parameters#
None.
Return value#
None.
Exceptions#
- {{jsxref("TypeError")}}
- : Always thrown.
Description#
Because both primitive conversion and number conversion call valueOf() before toString(), if valueOf() is absent, then an expression like duration1 > duration2 would implicitly compare them as strings, which may have unexpected results such as "PT3S" > "PT1M". By throwing a TypeError, Temporal.Duration instances prevent such implicit conversions. You need to explicitly convert them to numbers using {{jsxref("Temporal/Duration/total", "Temporal.Duration.prototype.total()")}}, or use the {{jsxref("Temporal/Duration/compare", "Temporal.Duration.compare()")}} static method to compare them.
Examples#
Arithmetic and comparison operations on Temporal.Duration#
All arithmetic and comparison operations on Temporal.Duration instances should use the dedicated methods or convert them to primitives explicitly.
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"
Specifications#
{{Specifications}}
Browser compatibility#
{{Compat}}
See also#
- {{jsxref("Temporal.Duration")}}
- {{jsxref("Temporal/Duration/toString", "Temporal.Duration.prototype.toString()")}}
- {{jsxref("Temporal/Duration/toJSON", "Temporal.Duration.prototype.toJSON()")}}
- {{jsxref("Temporal/Duration/toLocaleString", "Temporal.Duration.prototype.toLocaleString()")}}