是否有任何流行的 JavaScript 库,如jQuery、Underscore.js或类似的实现'Hello {0}!'.format('World');
或等效的库?
与不包含它的字符串连接相比,这是 JavaScript 中的一种不好的做法,还是它只是被忽略或被认为过于专业而无法包含在流行的库中?或者,还有别的原因吗?
(请不要用 String.prototype.format 的实现来回答,我要求的是我可能忽略的流行库中的功能。)
是否有任何流行的 JavaScript 库,如jQuery、Underscore.js或类似的实现'Hello {0}!'.format('World');
或等效的库?
与不包含它的字符串连接相比,这是 JavaScript 中的一种不好的做法,还是它只是被忽略或被认为过于专业而无法包含在流行的库中?或者,还有别的原因吗?
(请不要用 String.prototype.format 的实现来回答,我要求的是我可能忽略的流行库中的功能。)
MooTools 在字符串原型上有一个 .substitute 函数,看起来它可以做你想做的事。请参阅:http ://mootools.net/docs/core/Types/String#String:substitute 。
Prototype.js 有一个类似的 .interpolate 函数。见:http ://api.prototypejs.org/language/String/prototype/interpolate/
有些人会争辩说,修改原始原型是不好的做法,因为它可能会破坏每个循环的一些常见但格式不正确的内容。
另一方面,谷歌的闭包库定义了一个全局的 goog.string.format 函数,而不是在字符串原型上,它做同样的事情。请参阅:http ://closure-library.googlecode.com/svn/docs/namespace_goog_string.html#goog.string.format
实际上,您可以自己轻松编写这样的方法。由于 ECMAscript 不是一种严格类型的语言,您可以让您的生活更加轻松。例子:
String.prototype.sFormat = function _simpleFormat( map ) {
var myString = this.toString(),
args = map instanceof Array ? map : Array.prototype.slice.call( arguments );
while( ~myString.indexOf( '%r' ) ) {
myString = myString.replace( '%r', args.shift() );
}
return myString;
};
从那时起,我们可以像
var foo = "Hello",
bar = 42;
"%r world, the answer is %r".sFormat( foo, bar ); // "Hello world, the answer is 42"