js的RegExp真的不需要compile()了嗎?
這裡有兩行很有意思的代碼:
re=/^[0-9A-Za-z]{1,4}$/ig;
re.test("1234");
理論上輸出應該是true,但是實際執行效果卻是這樣的,test交替輸出true和false:
載入超時,點擊重試
這顯然不是開發者所期待的執行效果。使用compile()一下之後,恢復正常。執行效果如下:
載入超時,點擊重試
該效果在IE、FF、Chrome上均可重現。
發生交錯的原因在於,加了參數g(全局模式)時,每次test之後,下次使用本次lastIndex的值做起點了。而compile()後的對象每次都會複位lastIndex到0.
可見,compile()的價值依然是存在的。然而,在MDN文檔里明確說明,該方法已經過時了,不應使用。
RegExp.prototype.compile()所以,這是一個國際標準與瀏覽器廠商實現之間的矛盾了。大家怎麼看這個問題呢?
之前是作為問題提出來的,結果知乎說是「個人作業」果斷給關掉了。呵呵,這個「作業」還真的是個很大的作業呢!
推薦閱讀: