javascript实例:使用arguments实现string.format函数

发布时间:2019-09-15编辑:脚本学堂
本文分享一个javascript的例子,使用arguments实现一个字符串格式化的string.format函数,有兴趣的朋友,参考学习下吧。

本节主要内容:
使用arguments实现string.format函数

代码:
 

复制代码 代码示例:
function format(string) {
var args = arguments;
var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
return String(string).replace(pattern, function(match, index) {
return args[index];
});
};

通过format函数,以下代码:
format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");
返回:"And the papers want to know whose shirt you wear" 。

果然有点像c#下string.format函数一样传参调用。

根据自己对javascript和arguments的浅薄认识和理解,再来剖析一下这段程序:
1、正则表达式
非常巧妙地new了一个以%开头匹配1到argument个数的一个正则pattern,这个正则是下面第2点字符串替换的重要前提准备;
2、string的Replace函数
replace函数的第二个参数是function,这点非常令人“意外”。通过定义,变量args实际上就是arguments,接着通过args[index]就能取到第index个参数,而且index>=1且index<arguments.length又能保证获取参数的正确。

函数如此短小精悍,和强大的功能形成巨大反差,令人拍案。
被c#惯坏的开发者,会迷恋c#的string.format的写法(大部分还是使用习惯在作怪吧?),好事楼猪稍微改动了一下源码:
 

复制代码 代码示例:
function format(string) {
var args = arguments;
var pattern = new RegExp("{([0-" + arguments.length + "])}", "g");
return String(string).replace(pattern, function(match, index) {
var currentIndex = parseInt(index);
if (currentIndex + 1 > args.length || currentIndex < 0) {
throw new Error("参数索引出错");
}
return args[currentIndex + 1];
});
};

document.write(format("And the {0} want to know whose {1} you {2}", "papers", "shirt", "wear"));//大括号,索引从0开始...
这样看上去就可以像c#的编写风格一样调用format函数了。

正自发努力学习javascript中,但是对arguments认识还很稚嫩,虽然已经知道可以在自定义事件中通过它来定义createFunction函数,用createFunction函数来构造无参数的function给事件使用,但是当时一直抑郁“只知其形,不得其实”。

看完Andrew的佳作,豁然开朗,虽然反应迟钝后知后觉,依然感到无比振奋和欣慰。

这就是牛人思想的精华啊,带我们走进javascript编程的至高境界了。