Temporal.Duration.prototype.valueOf()
valueOf()
方法 Temporal.Duration
实例会抛出一个 TypeError
,这可以防止 Temporal.Duration
实例在算术或比较操作中被隐式转换为原始类型。
语法
js
valueOf()
参数
无。
返回值
无。
异常
TypeError
-
总是抛出。
描述
由于原始类型转换和数字转换在调用 toString()
之前都会调用 valueOf()
,如果 valueOf()
不存在,那么像 duration1 > duration2
这样的表达式会将它们隐式地作为字符串进行比较,这可能会产生意想不到的结果,例如 "PT3S" > "PT1M"
。通过抛出 TypeError
,Temporal.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 |
浏览器兼容性
加载中…