Chrome V8 Bug?功能在第二次调用后表现不同

Lon*_*est 11 javascript google-chrome v8 chromium ubuntu-10.04

请查看以下JavaScript.我已经把它拿走了,所以你可以专注于问题的本质.

您会注意到我连续两次调用prepPath函数,传入完全相同的字符串.在firefox和IE8中,此函数每次都会发出警告(如预期的那样).但是,在Chromium 5.0.375.127(55887)Ubuntu 10.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> 
Run Code Online (Sandbox Code Playgroud)

为什么它在Chromium中第二次返回假?

T.J*_*der 14

关于何时应该重置文字正则表达式的规范存在一些模糊性(回想一下他们有状态).你可以通过这样做来解决这个问题:

var regX = new RegExp(/[^\s/"'\\].*[^\s/"'\\]/g);
Run Code Online (Sandbox Code Playgroud)

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

或这个:

var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
regX.lastIndex = 0;
Run Code Online (Sandbox Code Playgroud)

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

我被那些比我更了解它的人告知,这实际上并不是一个彻头彻尾的错误,而是一种含糊不清的错误.它不只是Chrome,其他浏览器的某些版本也有类似的问题.