JS Native не обеспечивает удобные функции форматерации, и он выглядит хаотично и трудно читать с помощью сплайсинга символов, и это очень неудобно использовать. Я лично чувствую, что синтаксис, предоставленный в C#, более полезен, например:
String.format ("добро пожаловать, чтобы научиться '{0}', '{0}' это потрясающе, вы будете {1} it!", "JavaScript", "Love");Этот метод последовательной замены является относительно ясным, и при замене того же контента вы можете сохранить ситуацию передачи дублирования параметров. Ниже приведена простая версия JS в реализации (без строгого тестирования):
(function (exports) {exports.format = function () {var args = array.prototype.slice.call (arguments), sourcestr = args.shift (); function execreplace (текст, замена, индекс) {return text.replace (new Regexp ("// {"+index+"//}", 'g gtrayslise); args.reduce (execreplace, sourcestr);}}) (window.utils = window.utils || {}); console.log (utils.format («Добро пожаловать» {0} ',' {0} ' - это потрясающе, вы будете {1} It! »,« Javascript »,« Love »);Ключ - это предложение:
args.reduce (execreplace, sourcest);
Здесь используется функция уменьшения массива. Уменьшение и восстановление являются вновь добавленными функциями в ES5. Параметры этой функции уменьшаются (обратный вызов, начальный зал). Обратный вызов получает 4 параметра:
Предыдущая завещание:
При прохождении первой записи функции обратного вызовов, если указана начальная сумма, исходное значение будет использоваться непосредственно, если не будет указан первый элемент массива, будет использоваться первый элемент массива.
Значение второго и последующего обхода является результатом предыдущего обхода.
Результат, возвращаемый последним обходом, будет использоваться в качестве возвращаемого значения функции уменьшения.
CurrentValue: текущий пункт, который он прошел
Индекс: индекс текущего элемента в массиве
Массив: оригинальный массив
В каждом выполнении в ExecReplace результат после предыдущей замены используется в качестве исходной строки замены, индекс текущего элемента используется в качестве замены содержимого, и, в свою очередь, итерации, наконец, завершить содержимое замены.
Примечание: Reduceright в основном такая же, как и функция снижения, за исключением того, что его порядок обхода находится справа налево