【问题标题】:When did all browsers start supporting the String.replace(regexp, replacement_function)?所有浏览器什么时候开始支持 String.replace(regex, replacement function)?
【发布时间】:2013-04-13 11:42:21
【问题描述】:

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

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

我正在查看 2005 年编写的一些代码,其中 complicated workaround 已用于替换部分字符串。代码的 cmets 清楚地表明它最初使用了函数式 replace() 方法,但该变通方法对于跨浏览器兼容性是必要的。

ECMAScript v3 于 1999 年问世,据我所知(来自 this discussion postthis blog post),自 2001 年底以来,主要浏览器都支持 ECMAScript v3。可能是作者错了,或者有人可以阐明为什么在 2005 年可能需要这种变通方法?

...

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

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

更改代码以解决问题。

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

【问题讨论】:

  • 还是说很多用户还在使用旧浏览器?
  • 有可能。这就是我希望阐明的。
  • 我认为 Juhana 可能是对的 - 这完全取决于相关代码的用途。可能有足够多的目标受众使用过时的浏览器;也许只有一个拥有过时设置的人大声抱怨。也许它针对的是“主要”浏览器后面的一些非桌面级浏览器。在不知道上下文的情况下很难分辨
  • 据我记得,Safari 2.x 不支持将replace 用作第二个参数。这就是为什么在 Prototype.js 中我们使用 String#gsub 的部分原因(除了 ruby​​esque 方法名称和一些额外的糖)。快速谷歌搜索显示这个 webkit 错误:bugs.webkit.org/show_bug.cgi?id=3294 所以显然这在 2005 年底的某个时候得到了修复。基于phrogz.net/JS/replaceTest.html 显然 IEMac 也不支持这个:) 所有这一切都意味着你可以安全地使用 function-as -2nd-argument 今天,除非与 Saf 2 或 IEMac 等恐龙的兼容性很重要。
  • 您可能对此阅读过多。 “太多”可能占流量的 1%,没有上下文就无法判断。如果您想了解更多信息,ECMAScript support matrix 可能会有所帮助。如果您将问题发布到 comp.lang.javascript 新闻组(使用新闻阅读器以获得最佳结果),您可能会获得更多信息。

标签: javascript cross-browser ecma262


【解决方案1】:

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

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

事实上,Gavin Kistner 在第一页中提到的解决方法是在某些浏览器中的性能可能比功能替换方法更好,正如 here 所讨论的那样。

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

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

【讨论】:

    猜你喜欢
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2011-04-20
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多