代码之家  ›  专栏  ›  技术社区  ›  Lonnie Best

Chrome V8错误?函数在第二次调用后表现不同

  •  11
  • Lonnie Best  · 技术社区  · 14 年前

    请看下面的JavaScript。我已经把东西拿出来了,所以你可以关注问题的本质。

    您会注意到,我连续两次调用prepPath函数,传入完全相同的字符串。在firefox和IE8中,这个函数每次都会提醒true(如预期的那样)。但是,在Chromium5.0.375.127(55887)Ubuntu10.04中,函数第一次返回true,第二次返回false,尽管输入保持完全相同!

    <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> 
    

    1 回复  |  直到 14 年前
        1
  •  14
  •   T.J. Crowder    14 年前

    规范中有一些关于文本regex何时应该重置的模糊性(回想一下它们有state)。您可以通过执行以下操作来解决此问题:

    var regX = new RegExp(/[^\s/"'\\].*[^\s/"'\\]/g);
    

    实例: http://jsbin.com/irate

    或者这个:

    var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
    regX.lastIndex = 0;
    

    实例: http://jsbin.com/irate/2

    我被那些比我更深入研究过它的人告知,它实际上并不是一个彻头彻尾的bug,而是一个模棱两可的问题。而且不仅仅是Chrome,其他浏览器的一些版本也有类似的问题。

    推荐文章