2013-04-13 3 views
13

Nach der 6. Ausgabe von JavaScript: The Definitive Guide (Flanagan, 2011):Wann haben alle Browser angefangen, String.replace (regexp, replacement_function) zu unterstützen?

ECMAScript v3 gibt an, dass die Ersatz Argument replace() anstelle einer Zeichenfolge eine Funktion sein kann.

Ich schaue auf einen Code geschrieben im Jahr 2005, wo ein complicated workaround wurde verwendet, um Teile einer Zeichenfolge zu ersetzen. Die Kommentare für den Code zeigen deutlich, dass ursprünglich die funktionale replace()-Methode verwendet wurde, die Problemumgehung jedoch für die browserübergreifende Kompatibilität erforderlich war.

ECMAScript v3 kam 1999 heraus und, soweit ich (von this discussion post und this blog post) sagen kann, ECMAScript v3 wurde in den wichtigsten Browsern unterstützt seit Ende 2001 kann der Autor falsch gewesen, oder jemand beleuchten kann auf Warum könnte ein solcher Workaround im Jahr 2005 notwendig gewesen sein?

...

UPDATE Der eigentliche Kommentar vom Autor des Codes sagt:

Lambda-Funktionen in regexps mit zu vielen Browsern zur Zeit ein Problem sind.

Code geändert, um zu umgehen.

Der Autorcode funktioniert oder läuft this business, obwohl der Code selbst ein persönliches Projekt sein kann.

+2

Oder könnte es sein, dass viele Benutzer noch alte Browser verwenden? – JJJ

+0

Es ist möglich. Das hoffe ich zu beleuchten. – guypursey

+2

Ich denke, Juhana hat wahrscheinlich recht - es hängt alles davon ab, wofür der fragliche Code verwendet wurde. Vielleicht war genug von der beabsichtigten Zielgruppe, veraltete Browser zu betreiben; vielleicht hat sich nur eine Person mit einem veralteten Setup laut genug beschwert. Vielleicht zielte es auf einige Browser, die nicht zu den Desktop-Klassen gehörten, hinter den "Haupt" -Browsern. Etwas schwer zu sagen, ohne den Kontext zu kennen – Flambino

Antwort

6

wird auf den Kommentaren auf die Frage oben Diese Antwort basiert (mit besonderem Dank an kangax, Antwort, die ich werde wahrscheinlich annehmen, wenn er eine auszulaufen!)

Während es möglich ist, dass ich gelesen haben könnte " zu viele Browser "wörtlich, es ist auch möglich, dass String.replace() mit einer Funktion als Argument ein Problem in Safari 2.x (mit JavaScriptCore) und in IEMac 5.x im Jahr 2005 war. Beweise für diese Probleme in dieser Zeit existiert here, und mit diesen bestimmten Versionen der zuvor genannten Browser here.

Tatsächlich ist die von Gavin Kistner auf der ersten dieser Seiten erwähnte Problemumgehung eine, deren Leistung in einigen Browsern besser sein kann als die funktionale Ersetzungsmethode, wie diskutiert here.

Nichtsdestotrotz scheint es (wie ich vermutet habe), dass ein funktioneller Ersatz heutzutage in allen Browsern akzeptabel ist.

Vielen Dank an alle Kommentatoren zu dieser Frage.

Verwandte Themen