14

根据第 6 版JavaScript:权威指南(Flanagan,2011):

ECMAScript v3 指定替换参数replace()可以是函数而不是字符串。

我正在查看 2005 年编写的一些代码,其中使用了复杂的解决方法来替换部分字符串。代码的注释清楚地表明它最初使用了函数replace()方法,但解决方法是跨浏览器兼容性所必需的。

ECMAScript v3 于 1999 年问世,据我所知(从这篇讨论文章这篇博客文章),自 2001 年底以来,主流浏览器都支持 ECMAScript v3。可能是作者错了,还是有人能解释一下为什么在 2005 年可能需要这种变通方法?

...

更新代码作者的实际评论说:

RegExps 中的 lambda 函数目前是浏览器过多的问题。

更改代码以解决问题。

作者代码为该业务工作或运行,尽管代码本身很可能是个人项目。

4

1 回答 1

6

该答案基于对上述问题的评论(特别感谢kangax,如果他选择留下一个,我可能会接受他的回答!)

虽然我可能一直在阅读“太多浏览器”字面意思,但也有可能String.replace()在 2005 年的 Safari 2.x(使用 JavaScriptCore)和 IEMac 5.x 中使用函数作为参数是一个问题。证据当时的这些问题都存在这里,并且与上述浏览器的那些特定版本存在这里

事实上,Gavin Kistner 在这些页面的第一个页面上提到的解决方法是在某些浏览器中的性能可能比功能替换方法更好,如此所述。

尽管如此,抛开性能不谈,似乎(正如我所怀疑的)功能性替换在今天的所有浏览器中都是可以接受的。

非常感谢所有对此问题的评论者。

于 2013-05-07T11:44:30.890 回答