一、背景
在C#中,String类有一个Format()方法,可以方便使用字符串模板和动态参数来构建最终的字符串。
比如有如下代码:
Console.WriteLine(String.Format("Current Page Index: {0}, Total Pages: {1}", 10, 150));
最终输出为:
Current Page Index: 10, Total Pages: 150
但是,JavaScript 的String对象没有这样的字符串模板方法。不过,我们可以自行给它的String对象添加一个。来模仿C#中的String.Format()。
二、解决方案
代码:
String.format = function () { if (arguments.length <= 0) { return ""; } else { var string = arguments[0]; for (var i = 1; i < arguments.length; i++) { string = string.replace("{" + (i - 1) + "}", arguments[i]); }return string; } };</pre>
三、应用示例
这样写代码:
alert(String.format("Current Page Index: {0}, Total Pages: {1}", 10, 150));运行结果: 点击这里运行
四、原理剖析
- 在 JavaScript 中,可以修改已有对象,或者为已有对象添加新方法。
- 本例中就是为已有对象String添加了format()新方法。
- 由于需要传递给String.format()方法的参数不确定,故需要用到arguments对象。
- 在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,就能访问它们。第一个参数位于位置0,第二个参数位于位置1,依次类推。
- 与其他程序设计语言不同,Javascript不会验证传递给函数的参数个数是否等于函数定义的参数个数。开发者定义的函数都可以接受任意个数的参数(根据Netscape的文档,最多能接受25个),而不会引发任何错误,任何遗漏的参数都会以undefined传递给函数,多余的参数将忽略。
- 因此本例中在函数定义处根本没有定义参数。
[donate: www.zizhujy.com]