Chrome V8错误?被称为第二次的功能不同
-
02-10-2019 - |
题
请查看以下JavaScript。我已经把东西从中取出了,因此您可以专注于问题的本质。
您会注意到我连续两次调用Preppath功能,并通过完全相同的字符串。在Firefox和IE8中,此函数每次(如预期)都会提醒。但是,在Chromium 5.0.375.127(55887)Ubuntu 10.04中,该功能是第一次返回true,尽管输入完全相同!
<script type="text/javascript">
function prepPath(str)
{
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
if(regX.test(str))
{
alert("true: " + str);
}
else
{
alert("false; " + str);
}
}
prepPath("/desktop"); // alerts: true
prepPath("/desktop"); // alerts: false
</script>
为什么在铬中第二次返回错误?
解决方案
规格上有一些歧义,即何时要重置直言不讳(回想一下他们有状态)。您可以这样做:
var regX = new RegExp(/[^\s/"'\\].*[^\s/"'\\]/g);
实时示例: http://jsbin.com/irate
或这个:
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
regX.lastIndex = 0;
实时示例: http://jsbin.com/irate/2
那些对它的研究的人告诉我,这实际上不是一个彻底的错误,而是歧义。不仅是铬,其他浏览器的某些版本也有类似的问题。
不隶属于 StackOverflow