2013-04-13 9 views
13

Secondo la 6 ° edizione di JavaScript: The Definitive Guide (Flanagan, 2011):Quando tutti i browser hanno iniziato a supportare String.replace (regexp, replacement_function)?

ECMAScript v3 specifica che la sostituzione argomento replace() può essere una funzione invece di una stringa.

Sto guardando un codice scritto nel 2005, in cui è stato utilizzato uno complicated workaround per sostituire parti di una stringa. I commenti per il codice indicano chiaramente che inizialmente utilizzava il metodo funzionale replace() ma che la soluzione alternativa era necessaria per la compatibilità tra browser.

ECMAScript v3 è uscito nel 1999 e, per quanto posso dire (da this discussion post e this blog post), ECMAScript v3 è stata sostenuta attraverso i principali browser dalla fine del 2001. Potrebbe l'autore hanno sbagliato, o qualcuno può far luce su perché una tale soluzione avrebbe potuto essere necessaria nel 2005?

...

UPDATE Il commento effettivo l'autore del codice dice:

funzioni lambda in espressioni regolari sono attualmente un problema con troppi browser.

codice modificato per aggirare.

Il codice dell'autore funziona per o viene eseguito this business, sebbene il codice stesso possa essere un progetto personale.

+2

Oppure potrebbe essere che molti utenti stiano ancora utilizzando i vecchi browser? – JJJ

+0

È possibile. Questo è quello che spero di far luce. – guypursey

+2

Penso che probabilmente Juhana abbia ragione - tutto dipende da cosa è stato usato il codice in questione. Forse abbastanza del suo pubblico previsto era in esecuzione browser obsoleti; forse solo una persona con una configurazione obsoleta si è lamentata abbastanza forte. Forse stava prendendo di mira alcuni browser non di classe desktop che si trovavano dietro i browser "principali". Un po 'difficile da dire senza conoscere il contesto – Flambino

risposta

6

Questa risposta si basa sui commenti alla domanda di cui sopra (con un ringraziamento speciale a kangax, la cui risposta mi sarà probabilmente accettare se sceglie di lasciare uno!)

Mentre è possibile che ho potuto ho letto " troppi browser "letteralmente, è anche possibile che String.replace() con una funzione come argomento fosse un problema in Safari 2.x (utilizzando JavaScriptCore) e in IEMac 5.x nell'anno 2005. La prova di questi problemi in quel momento esiste here, e con quelle particolari versioni dei suddetti browser here.

In effetti, la soluzione alternativa menzionata da Gavin Kistner sulla prima di queste pagine è quella la cui prestazione può essere migliore in alcuni browser rispetto al metodo di sostituzione funzionale, come illustrato in here.

Tuttavia, a parte le prestazioni, sembra (come sospettavo) che una sostituzione funzionale sia accettabile in tutti i browser oggi.

Mille grazie a tutti i commentatori di questa domanda.

Problemi correlati