Date.prototype[Symbol.toPrimitive]()
[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
語法
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® 2026 語言規範 # sec-date.prototype-%symbol.toprimitive% |
瀏覽器相容性
載入中…