发布了一个性能不太高的format实现(meizz)
meizz 2006-12-18 10:24:12 12.15日看到 hax (海曦) 发的一个“发布了一个高性能的format实现”(http://community.csdn.net/Expert/TopicView1.asp?id=5188073)的代码,看出了一些缺陷。hax 为了达到高速,使用了 $n 这种比较特殊的处理模式,城然速度是快了,但是本不该被替换的也被替换了,例如:'$1$2$3$4$5$6$7$8$9$10'.format('a'); 这样的替换,应该的结果是 a$2$3$4$5$6$7$8$9$10,而你的方法里只能返回一个字母 a ,这也是你这种方法带来的副作用。我也写了一段,效率不如 hax 的高,但还是比较管用的代码。
<script type="text/javascript">/*<![CDATA[*/
String.prototype.format = function(str)
{
if(arguments.length==0) return this;
if("undefined"==typeof String.__supportsRegFunction)
{
String.__supportsRegFunction=true;
if(/MSIE (\d+(\.\d+)?)/i.test(navigator.userAgent))
{
String.__supportsRegFunction=parseFloat(RegExp.$1)>=5.5;
}
}
if(String.__supportsRegFunction)
{
var A = arguments;
return this.replace(/\{(\d+)\}/g, function(a, b){return A[b]||a});
}
else
{
for(var i=0, s=this, n=arguments.length; i<n; i++)
{
s = s.split("{"+ i +"}").join(arguments[i]);
}
return s;
}
}
var str = "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}";
alert(str.format("a", "b", "c", "d", "e", "f", "g"));
/*]]>*/
</SCRIPT>