34

我正在检查如何以下列格式显示 JavaScript 日期:YYYY-MM-DDTHH:mm:ss.sssZ,但我看到有两种方法这样做:.toJSON().toISOString()。它们之间有什么真正的区别吗?

4

3 回答 3

34

一个方便的区别是,如果您的日期无效,.toJSON()将输出null. 但是,.toISOString()的行为可能会有所不同。在 Firefox 中,这会输出一个字符串"Invalid Date",但在 chrome 中会引发异常。

编辑:最新版本的 Firefox 已将行为修复为与 chrome 相同(引发异常)。但是,.toJSON() 和 .toISOString() 之间的区别仍然存在。(输出 null 与引发异常)

于 2013-07-09T11:37:07.473 回答
29

在内部,如果可用,则toJSON()调用,所以没有区别。toISOString()

15.9.5.44 Date.prototype.toJSON(键)

此函数提供 Date 对象的字符串表示形式,供 JSON.stringify (15.12.3) 使用。

当使用参数 key 调用 toJSON 方法时,将执行以下步骤:

  1. 令 O 为调用 ToObject 的结果,并将 this 值作为其参数。

  2. 设 tv 为 ToPrimitive(O, hint Number)。

  3. 如果 tv 是一个数字并且不是有限的,则返回 null。

  4. 令 toISO 为使用参数“toISOString”调用 O 的 [[Get]] 内部方法的结果。

  5. 如果 IsCallable(toISO) 为 false,则抛出 TypeError 异常。

  6. 返回调用 toISO 的 [[Call]] 内部方法的结果,其中 O 作为 this 值和一个空参数列表。

于 2013-04-24T17:35:56.460 回答
2

JSON 日期格式遵循 ISO 8601,这也是toISOString产生的。两种方法返回的值之间没有功能差异。

于 2013-04-24T17:33:13.510 回答