【发布时间】:2020-02-24 21:13:30
【问题描述】:
我使用一个函数来检查输入的值是否是在我的应用程序中用于特定目的的有效文本。
有效值是一个字符串,它不是有效的日期或数字,既不是真也不是假。
checkText(str) {
return isNaN(str) && isNaN(Date.parse(str)) && ['true', 'false'].indexOf(str) == -1;
}
它工作正常,但我遇到了这个字符串的问题:“New Item 3”。
Date.parse("New Item 3") 返回一个数字,但是为什么呢!!?另外,如果您将 3 更改为小于 13 的任何数字,它将返回数字!
这里的任何人都可以向我解释会发生什么?
【问题讨论】:
-
无论前面有多少个字符串,它都会返回一个数字。例如。
Date.parse("New Item Blah Foo 3")和Date.parse("N 3")也将被正确解析。我猜字符串中的最后一个数字被解释为一个月,这就是为什么它在大于 12 时返回NaN。我在最新版本的 Brave、Chromium 和 Chrome 上对其进行了测试(它们都使用 V8)。 -
非标准日期字符串的处理依赖于平台。也许无论您在何种环境中尝试过,都会以某种方式发现这是一个非无效字符串,并使用一些奇怪的规则对其进行解析。例如,它在 Firefox 中不起作用。
-
Date.parse("New Item 3")在 FF70 中返回NaN。不过,typeof NaN是“数字”。 -
有趣的是,在 Firefox 和 IE11 中
Date.parse("New Item 3")返回NaN,在 Chrome/Chromium 中返回983401200000 -
来自 MDN:“在 ES5 之前不建议使用 Date.parse,字符串的解析完全取决于实现。不同主机解析日期字符串的方式仍有很多差异,因此日期字符串应该手动解析(如果要容纳许多不同的格式,库可以提供帮助)。”
标签: javascript string date nan