2

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

与不包含它的字符串连接相比,这是 JavaScript 中的一种不好的做法,还是它只是被忽略或被认为过于专业而无法包含在流行的库中?或者,还有别的原因吗?

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

4

2 回答 2

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

于 2012-10-06T03:46:35.387 回答
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"
于 2012-10-05T23:07:34.667 回答