Date.prototype[Symbol.toPrimitive]()

Baseline 已广泛支持

该特性已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 4 月以来,它已在各大浏览器上可用。

[Symbol.toPrimitive]() 方法用于 Date 实例,它会根据提供的提示(hint)返回一个代表此日期的原始值。这个值可以是字符串或数字。

试一试

// Depending on timezone, your results will vary
const date = new Date("20 December 2019 14:48");

console.log(date[Symbol.toPrimitive]("string"));
// Expected output: "Fri Dec 20 2019 14:48:00 GMT+0530 (India Standard Time)"

console.log(date[Symbol.toPrimitive]("number"));
// Expected output: 1576833480000

语法

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® 2026 语言规范
# sec-date.prototype-%symbol.toprimitive%

浏览器兼容性

另见