Аналоги методов String.format и String.startsWith в jQuery

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
// Готовьтесь, мы собираемся расширить прототип String!
String.prototype.format = function() {
  return this.replace(/{(\d+)}/g, (match, number) => 
    typeof arguments[number] !== 'undefined' ? arguments[number] : match
  );
};

// Теперь вы можете оценить результат.
console.log("Привет {0}, у тебя {1} непрочитанных сообщений".format("Алиса", 12));
// Выведет: Привет Алиса, у тебя 12 непрочитанных сообщений

Добавленный к объектам String метод format позволяет заменять плейсхолдеры типа {0}, {1} и т.д. на переданные аргументы. Теперь Алиса всегда будет знать, сколько у неё есть непрочитанных уведомлений.

Кинга Идем в IT: пошаговый план для смены профессии

Мельчайшие детали

Разработчики, работавшие с ASP.NET AJAX, наверняка помнят удобство использования String.format. Вы легко можете реализовать аналогичную функциональность в JavaScript или jQuery!

Следует проверять начало или конец строки? Не беда, с этими полифилами проще простого:

JS
Скопировать код
// Считаем с нуля — это уже традиция
if (!String.prototype.startsWith) {
  String.prototype.startsWith = function(search, pos) {
    return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
  };
}

// Проверка окончания строки теперь элементарна
if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(search, this_len) {
    this_len = this_len === undefined || this_len > this.length ? this.length : this_len;
    return this.substring(this_len – search.length, this_len) === search;
  };
}

Функция format из Быстрого ответа использует метод replace в сочетании с регулярным выражением, чтобы найти и заменить плейсхолдеры. Это выглядит довольно элегантно. Не забывайте корректно обрабатывать случаи, когда arguments[number] возвращает ложные значения (например, 0 или пустую строку).

JavaScript в стиле .NET

jQuery также использует вариации String.format, применяемые при работе с jQuery Validation Plugin. Вот пример:

JS
Скопировать код
// Когда закончился кофе — это уже серьёзно
$.validator.format("Ваш заказ {0} отправлен", "кофе");
// Результат: Ваш заказ кофе отправлен

Такой функционал полезен при процессе валидации форм и является частью более сложной инфраструктуры, включающей множество функций для проверки данных.

Обработка фигурных скобок и сложных заполнителей

Функция format должна уметь обрабатывать фигурные скобки {} через их экранирование:

JS
Скопировать код
// Для тех, кто любит фигурные скобки:
String.prototype.format = function() {
  var args = arguments;
  return this.replace(/({{)|(}})|{(\d+)}/g, function (m, openBrace, closeBrace, index) {
    if (openBrace) return "{";
    if (closeBrace) return "}";
    return args[index] || '';
  });
};

И это лишь начало! Внутри функции вы можете реализовать дополнительную логику для расширенного форматирования, например, для обработки обратного отсчета.

Псевдонимы и обработка ошибок

Изменение глобальных прототипов — дело небезопасное. Воспользуйтесь псевдонимами для сохранения безопасности:

JS
Скопировать код
// Творим, словно наше искусство — это искусство Пикассо!
function formatString(str) {
  var args = Array.prototype.slice.call(arguments, 1);
  return str.replace(/{(\d+)}/g, function(match, number) {
    return typeof args[number] != 'undefined' ? args[number] : match;
  });
}

console.log(formatString("Привет {0}, у тебя {1} непрочитанных сообщений", "Алиса", 12));
// Результат: Привет Алиса, у тебя 12 непрочитанных сообщений

Всегда проводите тщательное тестирование вашего кода на предмет конфликтов и ошибок. Ваша внимательность сегодня — залог спокойного завтра!

Визуализация

Способ оценить результат визуально:

Markdown
Скопировать код
😉 Рецепт 🎵: "Создать торт, взяв {0} яйц, {1} стаканов муки и {2} стаканов сахара."

Импровизация с ингредиентами:

Markdown
Скопировать код
😎 Ингредиенты 🥁🎸🎺: Яйца (🥚) = 2, Мука (🌾) = 3, Сахар (🍬) = 1

Применение String.format:

JS
Скопировать код
// Приготовьтесь к финальной фразе 🥁
var cakeRecipe = "Создать торт, взяв {0} яйца, {1} стаканов муки и {2} стаканов сахара.";
var filledRecipe = cakeRecipe.format(2, 3, 1);

И вот, по образу и подобию шеф-повара, код превращает предложение в:

Markdown
Скопировать код
😆 Готовый рецепт 🍰: "Создать торт, взяв 2 яйца, 3 стакана муки и 1 стакан сахара."

Плейсхолдеры {0}, {1}, {2} благодаря вашему коду становятся конкретными числами — 2, 3, 1. Как будто чувствуешь аромат свежеиспеченного торта! 🍽️

Расширение горизонтов

Функциональность метода format можно использовать более широко, например, для генерации HTML-элементов, основываясь на динамических данных.

JS встречает будущее

Знакомьтесь с шаблонными строками из JavaScript ES6, которые позволяют встраивать динамические выражения прямо в строку:

JS
Скопировать код
let user = "Алиса";
let messages = 12;
console.log(`Привет ${user}, у тебя ${messages} непрочитанных сообщений`);

Поддержка устаревшего ПО

Помните, что не все среды приветствуют нововведения. Будьте готовы к использованию полифиллов или альтернативных решений для поддержки устаревших браузеров.

Полезные материалы

  1. Шаблонные строки (шаблонные литералы) – JavaScript | MDN — подробное руководство по шаблонным строкам.
  2. Аналог printf/String.Format в JavaScript – Stack Overflow — обсуждение альтернатив String.format в сообществе разработчиков JS.
  3. Шаблонные литералы | CSS-Tricks — статья на CSS-Tricks о шаблонных литералах.
  4. Спецификация ECMAScript 2015 (ES6) – ECMA-262 6-е издание — для тех, кто хочет узнать JS до мельчайших подробностей.
  5. GitHub – camsong/You-Dont-Need-jQuery — как обойтись без jQuery.
  6. HTML шаблонизация с помощью шаблонных строк ES6 — когда новая технология придает новую жизнь HTML.
  7. Глава 8. Шаблонные литералы — более глубокий взгляд на материал о шаблонных литералах.