2

jQueryUnderscore.jsなど、実装'Hello {0}!'.format('World');または同等の一般的な JavaScript ライブラリはありますか?

これは、含まれていない文字列連結とは対照的に、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/

ただし、プリミティブ プロトタイプを変更することは、ループごとにいくつかの一般的ではあるが正しく形成されていないものを壊す可能性があるため、悪い習慣であると主張する人もいます。

一方、Google のクロージャー ライブラリは、文字列プロトタイプではなく、ほぼ同じことを行うグローバルな 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 に答える