這裡有兩行很有意思的代碼:

re=/^[0-9A-Za-z]{1,4}$/ig;
re.test("1234");

理論上輸出應該是true,但是實際執行效果卻是這樣的,test交替輸出true和false:

載入超時,點擊重試

test交替輸出true和false

這顯然不是開發者所期待的執行效果。使用compile()一下之後,恢復正常。執行效果如下:

載入超時,點擊重試

該效果在IE、FF、Chrome上均可重現。

發生交錯的原因在於,加了參數g(全局模式)時,每次test之後,下次使用本次lastIndex的值做起點了。而compile()後的對象每次都會複位lastIndex到0.

可見,compile()的價值依然是存在的。然而,在MDN文檔里明確說明,該方法已經過時了,不應使用。

RegExp.prototype.compile()?

developer.mozilla.org
圖標

所以,這是一個國際標準與瀏覽器廠商實現之間的矛盾了。大家怎麼看這個問題呢?

之前是作為問題提出來的,結果知乎說是「個人作業」果斷給關掉了。呵呵,這個「作業」還真的是個很大的作業呢!


推薦閱讀:
查看原文 >>
相关文章