【发布时间】:2013-04-13 11:42:21
【问题描述】:
根据第 6 版 JavaScript:权威指南(Flanagan,2011 年):
ECMAScript v3 指定
replace()的 replacement 参数可以是函数而不是字符串。
我正在查看 2005 年编写的一些代码,其中 complicated workaround 已用于替换部分字符串。代码的 cmets 清楚地表明它最初使用了函数式 replace() 方法,但该变通方法对于跨浏览器兼容性是必要的。
ECMAScript v3 于 1999 年问世,据我所知(来自 this discussion post 和 this blog post),自 2001 年底以来,主要浏览器都支持 ECMAScript v3。可能是作者错了,或者有人可以阐明为什么在 2005 年可能需要这种变通方法?
...
更新代码作者的实际评论说:
RegExps 中的 lambda 函数目前是浏览器过多的问题。
更改代码以解决问题。
作者代码为this business 工作或运行,尽管代码本身很可能是个人项目。
【问题讨论】:
-
还是说很多用户还在使用旧浏览器?
-
有可能。这就是我希望阐明的。
-
我认为 Juhana 可能是对的 - 这完全取决于相关代码的用途。可能有足够多的目标受众使用过时的浏览器;也许只有一个拥有过时设置的人大声抱怨。也许它针对的是“主要”浏览器后面的一些非桌面级浏览器。在不知道上下文的情况下很难分辨
-
据我记得,Safari 2.x 不支持将
replace用作第二个参数。这就是为什么在 Prototype.js 中我们使用String#gsub的部分原因(除了 rubyesque 方法名称和一些额外的糖)。快速谷歌搜索显示这个 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