請看下面的JavaScript。我已經拿出了一些東西,所以你可以專注於問題的本質。Chrome V8的錯誤?功能在被稱爲第二次後起作用不同
您會注意到,我連續兩次調用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>
爲什麼它在Chromium中第二次返回錯誤?
在常規表達式中唯一需要'g'標誌的時間是,如果您想多次使用同一個表達式,而lastIndex標記爲兩次使用之間。如果沒有'g'標誌,你的代碼將按照你期望的方式工作。如果在定義它之後設置regX.lastIndex = 0,它也將返回期望值。 – kennebec 2010-09-13 18:47:33