发布了一个性能不太高的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>
...全文
996 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenguang79 2007-01-08
  • 打赏
  • 举报
回复
感谢楼主的分享
CCTV_13 2007-01-08
  • 打赏
  • 举报
回复
技术上,学习了.

不过,不太清楚有什么实用性.(开发经验少)
北京不不 2007-01-04
  • 打赏
  • 举报
回复
顶,还行。
My97 2006-12-27
  • 打赏
  • 举报
回复
学习了
qiangsheng 2006-12-27
  • 打赏
  • 举报
回复
完全不懂,纯属学习。
liufei8463 2006-12-27
  • 打赏
  • 举报
回复
学习兼接分~
senventt 2006-12-26
  • 打赏
  • 举报
回复
学习
vulcan23 2006-12-26
  • 打赏
  • 举报
回复
学习兼接分~
tianshul8 2006-12-26
  • 打赏
  • 举报
回复
正则表达式嵌套函数,学习。
lazyboy_wu 2006-12-25
  • 打赏
  • 举报
回复
学习,接分!
meizz 2006-12-25
  • 打赏
  • 举报
回复
代码效率要比我原来的代码高出 5% 且代码更精简了!
<script type="text/javascript">/*<![CDATA[*/
String.prototype.format=function()
{
if(arguments.length==0) return this;
for(var s=this, i=0; i<arguments.length; i++)
{
s=s.replace(new RegExp("\\{"+i+"\\}","g"), arguments[i]);
}
return s;
};
var str = "{0}{1}{1}{1}{1}{2}{3}{4}{5}{6}{7}{8}{9}";
alert(str.format("a", "b", "c", "d", "e", "f", "g"));
/*]]>*/
</SCRIPT>
gzdiablo 2006-12-25
  • 打赏
  • 举报
回复
明白了原来是这样 呵呵 用这么久还真没用过这个
gzdiablo 2006-12-25
  • 打赏
  • 举报
回复
return this.replace(/\{(\d+)\}/g, function(a, b){return A[b]||a});
这句看不明白后面的a和b的值从哪过来的?
pzhuyy 2006-12-25
  • 打赏
  • 举报
回复
钻呀.....
何时才能钻呀.....
ccccffff 2006-12-25
  • 打赏
  • 举报
回复
向强人学习.
hurrayboy 2006-12-25
  • 打赏
  • 举报
回复
向强人学习.

先收藏下来.
dh20156 2006-12-24
  • 打赏
  • 举报
回复
顶!
cpp2017 2006-12-24
  • 打赏
  • 举报
回复
收藏了,多谢.
Mapleleaf123 2006-12-23
  • 打赏
  • 举报
回复
向钻看齐
showlin 2006-12-23
  • 打赏
  • 举报
回复
接钻石的分会不会1分顶10分?
加载更多回复(30)

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧