在我的应用程序中,我使用一个函数来检查输入的值是否是用于特定目的的有效文本。
有效值是一个字符串,在该字符串中,它不是有效日期或数字,也不是真或假。
checkText(str) {
return isNaN(str) && isNaN(Date.parse(str)) && ['true', 'false'].indexOf(str) == -1;
} 它正常工作,但我遇到了一个问题:“新项目3”。
Date.parse("New Item 3")返回一个数字,但是为什么!!?此外,如果您将3改为任何小于13的数字,它将返回号码!
这里有人能向我解释一下发生了什么吗?
发布于 2019-10-29 15:46:40
实际上,这里的问题来自于方法,如果您检查:
Date.parse("New Item 3");它将返回:
983401200000
console.log(Date.parse("New Item 3"));
因此,这里的事实是,Date.parse()将按照浏览器规范运行,可能返回或不返回Number。它依赖于浏览器。
你可以从MDN参考中看到:
ECMAScript规范规定:如果字符串不符合标准格式,则函数可能返回到任何特定于实现的启发式算法或特定于实现的解析算法。在ISO格式化字符串中包含非法元素值的不可识别字符串或日期将导致Date.parse()返回NaN。 但是,根据浏览器和所提供的值,日期字符串中不被识别为由ECMA-262定义的简化ISO格式中的无效值可能会也可能不会导致NaN。
发布于 2019-10-29 15:39:18
经验教训:Date.parse不是日期验证器。
偶MDN 他说
不建议使用
Date.parse,直到ES5,字符串解析完全依赖于实现。不同的主机解析日期字符串的方式仍然存在许多差异,因此应该手动解析日期字符串(如果要容纳许多不同的格式,库可以提供帮助)。
再往下走
ECMAScript规范规定:如果字符串不符合标准格式,则函数可能返回到任何特定于实现的启发式算法或特定于实现的解析算法。在ISO格式化字符串中包含非法元素值的不可识别字符串或日期将导致Date.parse()返回NaN。 但是,根据浏览器和所提供的值,日期字符串中的无效值不被识别为ECMA-262定义的简化ISO格式,可能会也可能不会导致NaN。
https://stackoverflow.com/questions/58610667
复制相似问题