是否有任何流行的JavaScript库包含String.prototype.format或等效的?

时间:2012-10-05 22:59:38

标签: javascript

是否有任何流行的JavaScript库,如jQueryUnderscore.js或类似的实现'Hello {0}!'.format('World');或同等的?

在JavaScript中这是一种不好的做法,而不是字符串连接,它不包括在内,还是只是被忽视或被认为过于专业化而无法包含在流行的库中?或者,还有另一个原因吗?

(请不要回答String.prototype.format的实现,我要求在我可能忽略的流行库中提供功能。)

2 个答案:

答案 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"