Date.prototype[Symbol.toPrimitive]()
[Symbol.toPrimitive]()
方法是 Date
实例的方法,它返回表示此日期的原始值。根据给定的提示,它可以是字符串或数字。
试一试
语法
date[Symbol.toPrimitive](hint)
参数
hint
-
表示要返回的原始值类型的字符串。以下值为有效值
"string"
或"default"
:该方法应返回字符串。"number"
:该方法应返回数字。
返回值
如果 hint
为 "string"
或 "default"
,则此方法通过将 this
值强制转换为字符串(首先尝试 toString()
,然后尝试 valueOf()
)来返回字符串。
如果 hint
为 "number"
,则此方法通过将 this
值强制转换为数字(首先尝试 valueOf()
,然后尝试 toString()
)来返回数字。
异常
TypeError
-
如果
hint
参数不是三个有效值之一,则抛出此异常。
描述
[Symbol.toPrimitive]()
方法是 类型强制协议 的一部分。JavaScript 始终优先调用 [Symbol.toPrimitive]()
方法将对象转换为原始值。您很少需要自己调用 [Symbol.toPrimitive]()
方法;当遇到需要原始值的对象时,JavaScript 会自动调用它。
Date
对象的 [Symbol.toPrimitive]()
方法通过调用 this.valueOf()
并返回数字,或调用 this.toString()
并返回字符串来返回原始值。它的存在是为了覆盖默认的 原始强制 过程,以便返回字符串而不是数字,因为默认情况下,原始强制会在 toString()
之前调用 valueOf()
。使用自定义的 [Symbol.toPrimitive]()
,new Date(0) + 1
返回 "Thu Jan 01 1970 00:00:00 GMT+0000 (Coordinated Universal Time)1"
(字符串)而不是 1
(数字)。
示例
使用 [Symbol.toPrimitive]()
const d = new Date(0); // 1970-01-01T00:00:00.000Z
d[Symbol.toPrimitive]("string"); // "Thu Jan 01 1970 00:00:00 GMT+0000 (Coordinated Universal Time)"
d[Symbol.toPrimitive]("number"); // 0
d[Symbol.toPrimitive]("default"); // "Thu Jan 01 1970 00:00:00 GMT+0000 (Coordinated Universal Time)"
规范
规范 |
---|
ECMAScript 语言规范 # sec-date.prototype-%symbol.toprimitive% |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。