有人可以解释为什么以下代码片段会导致无效的日期对象吗?
new Date(new Date().toLocaleString())
// or
Date.parse(new Date().toLocaleString())
Run Code Online (Sandbox Code Playgroud)
ES5 规范的定义Date.parse明确允许这样做(强调我的定义):
...如果引用的所有属性都有其初始值,则以下所有表达式应在该实现中生成相同的数值:
Run Code Online (Sandbox Code Playgroud)x.valueOf() Date.parse(x.toString()) Date.parse(x.toUTCString()) Date.parse(x.toISOString())然而,表达
Run Code Online (Sandbox Code Playgroud)Date.parse(x.toLocaleString())不需要生成与前面三个表达式相同的 Number 值,并且一般来说,当给定任何不符合日期时间字符串格式( 15.9.1.15 ) 的 String值
Date.parse并且可能不会在该实现中由or方法产生。toStringtoUTCString
由于toLocaleString不需要生成符合日期时间字符串格式的字符串YYYY-MM-DDTHH:mm:ss.sssZ,因此允许其输出不被正确解析Date.parse。