这个javascript函数有什么作用?是否有意义?

时间:2012-03-05 21:11:40

标签: javascript

String.format = function()
{   var s = arguments[0];
    for (var i = 0; i < arguments.length - 1; i++)
    {   var reg = new RegExp("\\{" + i + "\\}", "gm");             
        s = s.replace(reg, arguments[i + 1]);
    }
  return s;
}

请解释一下。感谢。

2 个答案:

答案 0 :(得分:5)

它将第一个参数作为格式字符串,并将{0}的实例替换为第二个参数,{1}替换为第三个,依此类推。

String.format('{0} there, {1}', 'Hi', 'Josh'); =&gt; Hi there, Josh


逐行:

  1. 我们将一个名为format的函数附加到本地String对象(注意,而不是实例字符串。为此,您将使用{{1 }})。
  2. arguments是一个特殊对象,它是函数的执行上下文的一部分(其中还包含String.prototype的值)。它是类似数组的(它的键的范围从this0)但它不是一个数组(它不是arguments.length-1的实例,因此它没有任何一个原型方法,如Arraypop)。 push对象是JavaScript函数如何获取任意数量的参数。
  3. 遍历每个参数......
  4. 构建一个匹配arguments i {的正则表达式,其中 i 是循环迭代次数。第二个参数是正则表达式选项,}启用全局和多行模式。
  5. 使用提供的值替换匹配
  6. 返回修改后的字符串。

答案 1 :(得分:3)

它格式化一个字符串的方式与.NET System.String.Format的工作方式大致相同(如果你熟悉的话);它用{someNumber}个参数替换每个someNumber + 1。所以:

alert(String.format('{0} + {1} = {2}', 2, 5, 7));

会给:

  

2 + 5 = 7

arguments是传递给JavaScript函数的“神奇”数组*。

是的,这很有道理。


*实际上,它不是一个数组,但它看起来像一个。