是否有任何流行的JavaScript库,如jQuery,Underscore.js或类似的实现'Hello {0}!'.format('World');
或同等的?
在JavaScript中这是一种不好的做法,而不是字符串连接,它不包括在内,还是只是被忽视或被认为过于专业化而无法包含在流行的库中?或者,还有另一个原因吗?
(请不要回答String.prototype.format的实现,我要求在我可能忽略的流行库中提供功能。)
答案 0 :(得分:1)
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答案 1 :(得分:0)
实际上,您可以轻松地为自己编写这样的方法。由于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"