为什么JSON.parse()无法解析date.toJSON()创建的内容?

Syl*_*ain 4 javascript json

使用镀铬金丝雀测试

我可以将日期转换为JSON:

> (new Date()).toJSON()
  "2012-05-03T22:27:30.530Z"
Run Code Online (Sandbox Code Playgroud)

我可以将它转换回日期:

> typeof (new Date("2012-05-03T22:27:30.530Z"))
  object
Run Code Online (Sandbox Code Playgroud)

为什么我不能使用JSON.parse()将其解析为Date?JSON.parse返回一个字符串,而不是Date:

> JSON.parse('{"DateValue":"2012-05-03T22:27:30.530Z"}').DateValue
 "2012-05-03T22:27:30.530Z"
Run Code Online (Sandbox Code Playgroud)

Mar*_*eed 8

因为Date不是JSON中的有效类型.JSON只知道字符串,数字,布尔值,数组和通用对象(关联数组/散列/地图/字典/挑选你喜欢的名字).当你将其他任何内容转换为JSON时,你会得到上面的一个 - 这意味着如果你想要将"其他东西"作为它开始的类型退出,接收者必须做一些额外的工作来重新创建它.

有一些JSON库可以抽象出来,并且包含一个额外的属性来指示什么类是什么,所以如果接收器使用相同的库,他们将返回该类型,但这仍然是相同的工作,只是被库隐藏.