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;
}
请解释一下。感谢。
答案 0 :(得分:5)
它将第一个参数作为格式字符串,并将{0}
的实例替换为第二个参数,{1}
替换为第三个,依此类推。
String.format('{0} there, {1}', 'Hi', 'Josh');
=&gt; Hi there, Josh
逐行:
format
的函数附加到本地String
对象(注意,而不是实例字符串。为此,您将使用{{1 }})。arguments
是一个特殊对象,它是函数的执行上下文的一部分(其中还包含String.prototype
的值)。它是类似数组的(它的键的范围从this
到0
)但它不是一个数组(它不是arguments.length-1
的实例,因此它没有任何一个原型方法,如Array
或pop
)。 push
对象是JavaScript函数如何获取任意数量的参数。arguments
i {
的正则表达式,其中 i 是循环迭代次数。第二个参数是正则表达式选项,}
启用全局和多行模式。答案 1 :(得分:3)
它格式化一个字符串的方式与.NET System.String.Format
的工作方式大致相同(如果你熟悉的话);它用{someNumber}
个参数替换每个someNumber + 1
。所以:
alert(String.format('{0} + {1} = {2}', 2, 5, 7));
会给:
2 + 5 = 7
arguments
是传递给JavaScript函数的“神奇”数组*。
*实际上,它不是一个数组,但它看起来像一个。