我正在检查如何以下列格式显示 JavaScript 日期:YYYY-MM-DDTHH:mm:ss.sssZ
,但我看到有两种方法这样做:.toJSON()和.toISOString()。它们之间有什么真正的区别吗?
3 回答
一个方便的区别是,如果您的日期无效,.toJSON()
将输出null
. 但是,.toISOString()
的行为可能会有所不同。在 Firefox 中,这会输出一个字符串"Invalid Date"
,但在 chrome 中会引发异常。
编辑:最新版本的 Firefox 已将行为修复为与 chrome 相同(引发异常)。但是,.toJSON() 和 .toISOString() 之间的区别仍然存在。(输出 null 与引发异常)
在内部,如果可用,则toJSON()
调用,所以没有区别。toISOString()
15.9.5.44 Date.prototype.toJSON(键)
此函数提供 Date 对象的字符串表示形式,供 JSON.stringify (15.12.3) 使用。
当使用参数 key 调用 toJSON 方法时,将执行以下步骤:
令 O 为调用 ToObject 的结果,并将 this 值作为其参数。
设 tv 为 ToPrimitive(O, hint Number)。
如果 tv 是一个数字并且不是有限的,则返回 null。
令 toISO 为使用参数“toISOString”调用 O 的 [[Get]] 内部方法的结果。
如果 IsCallable(toISO) 为 false,则抛出 TypeError 异常。
返回调用 toISO 的 [[Call]] 内部方法的结果,其中 O 作为 this 值和一个空参数列表。
JSON 日期格式遵循 ISO 8601,这也是toISOString
产生的。两种方法返回的值之间没有功能差异。