为什么解析区域设置日期字符串会导致无效日期?

Chr*_*ris 6 javascript date

有人可以解释为什么以下代码片段会导致无效的日期对象吗?

new Date(new Date().toLocaleString())
// or
Date.parse(new Date().toLocaleString())
Run Code Online (Sandbox Code Playgroud)

aps*_*ers 1

ES5 规范的定义Date.parse明确允许这样做(强调我的定义):

...如果引用的所有属性都有其初始值,则以下所有表达式应在该实现中生成相同的数值:

x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())
Run Code Online (Sandbox Code Playgroud)

然而,表达

Date.parse(x.toLocaleString())
Run Code Online (Sandbox Code Playgroud)

不需要生成与前面三个表达式相同的 Number 值,并且一般来说,当给定任何不符合日期时间字符串格式( 15.9.1.15 ) 的 StringDate.parse并且可能不会在该实现中由or方法产生。toStringtoUTCString

由于toLocaleString不需要生成符合日期时间字符串格式的字符串YYYY-MM-DDTHH:mm:ss.sssZ,因此允许其输出不被正确解析Date.parse