js的RegExp真的不需要compile()了嗎?

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

re=/1{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
圖標
所以,這是一個國際標準與瀏覽器廠商實現之間的矛盾了。


  1. 0-9A-Za-z ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章