JSネイティブは便利なフォーマッタ関数を提供しておらず、キャラクターのスプライシングによって混oticと読みにくいように見え、使用するのは非常に不便です。私は個人的に、C#で提供される構文がより便利であると感じています。
string.format( "Welcome to Learn '{0}'、 '{0}'は素晴らしいです、あなたは{1} it!"、 "Javascript"、 "love");このシーケンシャル置換方法は比較的明確であり、同じコンテンツを置き換えると、重複パラメーターを渡す状況を保存できます。以下は、JSの単純な実装バージョンです(厳密なテストなし):
(function(exports){exports.format = function(){var args = array.prototype.slice.call(arguments)、sourcestr = args.shift(); function execreplace(text、facterment、index){return text.replace(new regexp( "// args.reduce(execreplace、sourcestr);}})(window.utils = window.utils || {}); console.log(utils.format( "welcome to Learn '{0}'、 '{0}'は素晴らしい、あなたは{1} '!重要なのはこの文です:
args.reduce(execreplace、sourcestr);
ここでは、配列の削減機能が使用されます。 ES5の新しく追加された機能は、削減と削減です。この関数のパラメーターは削減されます(コールバック、InitialValue)。コールバックは4つのパラメーターを受信します:
前のvalue:
コールバック関数の最初のエントリを通過する場合、initialValueが指定されている場合、ArivealValueが直接使用されます。配列の最初の要素が指定されていない場合、配列の最初の要素が使用されます。
2番目とその後のトラバーサルの値は、以前のトラバーサルの結果です。
最後のトラバーサルによって返される結果は、還元関数の返品値として使用されます。
currentValue:通過した現在のアイテム
インデックス:配列内の現在のアイテムのインデックス
配列:元の配列
execReplaceの各実行で、以前の交換後の結果は元の交換用文字列として使用され、現在のアイテムのインデックスは交換するコンテンツとして使用され、最終的に交換コンテンツを完了するために繰り返します。
注:reducerightは基本的に還元関数と同じですが、そのトラバーサル順序が右から左にあることを除いて