Date.prototype[Symbol.toPrimitive]()

基线 广泛可用

此功能已得到良好确立,并且可在许多设备和浏览器版本中使用。它自以下时间起在所有浏览器中都可用 2015 年 7 月.

[Symbol.toPrimitive]() 方法是 Date 实例的方法,它返回表示此日期的原始值。根据给定的提示,它可以是字符串或数字。

试一试

语法

js
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]()

js
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 的浏览器中加载。

另请参阅