2013-04-13 13 views
13

Według 6. edycja javascript: The Definitive Guide (Flanagan, 2011):Kiedy wszystkie przeglądarki zaczęły obsługiwać String.replace (regexp, replacement_function)?

ECMAScript v3 określa, że ​​wymiana argument replace() może być funkcją zamiast łańcucha.

Czekam na jakiegoś kodu napisanego w 2005 roku, gdzie complicated workaround została wykorzystana w celu zastąpienia części łańcucha. Komentarze do kodu wyraźnie wskazują, że pierwotnie używał on funkcjonalnej metody replace(), ale że obejście było konieczne dla kompatybilności z różnymi przeglądarkami.

ECMAScript v3 ukazał się w 1999 roku i, o ile mogę powiedzieć (od this discussion post i this blog post), ECMAScript V3 był wspierany w poprzek głównych przeglądarek od końca roku 2001. Czyżby autor zostały źle, albo ktoś może rzucić światło na dlaczego takie obejście mogło być konieczne w 2005 roku?

...

UPDATE Rzeczywisty komentarz przez autora kodu mówi:

funkcje lambda w wyrażeniach regularnych są obecnie problem ze zbyt wielu przeglądarek.

zmieniono kod w celu obejścia.

Kod autora działa lub uruchamia this business, chociaż sam kod może być osobistym projektem.

+2

A może wielu użytkowników wciąż używało starych przeglądarek? – JJJ

+0

Jest to możliwe. Właśnie to mam nadzieję rzucić światło. – guypursey

+2

Myślę, że Juhana ma prawdopodobnie rację - wszystko zależy od tego, do czego użyto kodu. Może wystarczyło jej docelowej publiczności były uruchomione przestarzałe przeglądarki; być może tylko jedna osoba o przestarzałej konfiguracji skarżyła się wystarczająco głośno. Być może był on skierowany do niektórych przeglądarek nie pracujących na komputerze, które były za "głównymi" przeglądarkami. Trudno powiedzieć bez znajomości kontekstu. – Flambino

Odpowiedz

6

Ta odpowiedź jest w oparciu o komentarze na pytanie powyżej (ze szczególnym dzięki kangax, którego odpowiedź będę prawdopodobnie zaakceptować jeśli zdecyduje się opuścić jeden!)

ile to jest możliwe, że mogę zostały czytania " zbyt wiele przeglądarek "dosłownie, możliwe jest również, że String.replace() z funkcją jako argumentem było problemem w Safari 2.x (przy użyciu JavaScriptCore) oraz w IEMac 5.x w roku 2005. Dowody tych problemów w tym czasie istnieją here, oraz z tymi konkretnymi wersjami przedstawionych przeglądarek here.

W rzeczywistości obejście wspomniane przez Gavina Kistnera na pierwszej z tych stron to taka, której wydajność może być lepsza w niektórych przeglądarkach niż metoda zastępowania funkcjonalnego, jak omówiono here.

Mimo to, wydaje się, (jak podejrzewałem), że wymiana funkcjonalna jest obecnie akceptowalna we wszystkich przeglądarkach.

Wielkie dzięki dla wszystkich komentujących na to pytanie.

Powiązane problemy