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%

瀏覽器相容性

另見