Temporal.Duration.prototype.valueOf()

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

valueOf() 方法 Temporal.Duration 实例会抛出一个 TypeError,这可以防止 Temporal.Duration 实例在算术或比较操作中被隐式转换为原始类型

语法

js
valueOf()

参数

无。

返回值

无。

异常

TypeError

总是抛出。

描述

由于原始类型转换数字转换在调用 toString() 之前都会调用 valueOf(),如果 valueOf() 不存在,那么像 duration1 > duration2 这样的表达式会将它们隐式地作为字符串进行比较,这可能会产生意想不到的结果,例如 "PT3S" > "PT1M"。通过抛出 TypeErrorTemporal.Duration 实例可以防止此类隐式转换。你需要使用 Temporal.Duration.prototype.total() 方法显式地将它们转换为数字,或者使用 Temporal.Duration.compare() 静态方法来比较它们。

示例

Temporal.Duration 的算术和比较操作

Temporal.Duration 实例的所有算术和比较操作都应该使用专门的方法,或者显式地将它们转换为原始类型。

js
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"

规范

规范
Temporal
# sec-temporal.duration.prototype.valueof

浏览器兼容性

另见