Специальные методы строк

Специальные методы строк

Технический фундамент «специальных» строковых методов

Эти методы решают узкие задачи форматирования и нормализации, которые трудно и рискованно реализовывать вручную циклами.
Их сила в предсказуемом контракте: четкий вход, четкий тип результата.

const id = '7';
const padded = id.padStart(3, '0');
const line = '-'.repeat(5);

console.log(padded); // 007
console.log(line); // -----

В этом уроке разберем repeat, padStart, padEnd, concat, normalize.

Повтор текста: repeat

repeat(count) повторяет строку указанное число раз.

console.log('='.repeat(10)); // ==========
console.log('ha'.repeat(3)); // hahaha

Практический кейс: визуальный разделитель в логах или простой индикатор прогресса.

function progressBar(done, total) {
  const filled = '#'.repeat(done);
  const empty = '-'.repeat(total - done);
  return `[${filled}${empty}]`;
}

console.log(progressBar(3, 8)); // [###-----]

Проверь себя: что произойдет, если передать в repeat отрицательное число?

Подсказка: будет ошибка RangeError (нельзя повторять строку отрицательное число раз).

Выравнивание: padStart и padEnd

padStart(targetLength, padString) добавляет символы в начало строки до нужной длины.

console.log('7'.padStart(3, '0')); // 007
console.log('42'.padStart(5, ' ')); // '   42'

Смотри, что важно:

  • если padString не указать, по умолчанию используется пробел;
  • padString будет повторяться и при необходимости обрезаться, чтобы ровно добить строку до targetLength.

padEnd делает то же самое в конце строки.

console.log('JS'.padEnd(6, '.')); // JS....

Микро-сценарий: маскирование номера карты.

function maskCard(last4) {
  return String(last4).padStart(16, '*');
}

console.log(maskCard('1234')); // ************1234

Склейка строк: concat

concat объединяет строки. Чаще сейчас используют шаблонные строки, но concat полезно знать.

const fullName = 'Анна'.concat(' ', 'Иванова');
console.log(fullName); // Анна Иванова

То же самое обычно пишут так:

const fullName2 = `${'Анна'} ${'Иванова'}`;

Unicode и одинаковые «на вид» строки: normalize

Новый термин: normalize() приводит Unicode-строку к нормализованной форме, чтобы корректно сравнивать символы с диакритикой.

const a = 'e\u0301'; // e + combining accent
const b = 'é';

console.log(a === b); // false
console.log(a.normalize() === b.normalize()); // true

Это важно, если ты работаешь с международными именами или импортируешь данные из разных систем.

Что будет, если изменить вход

console.log('9'.padStart(2, '0')); // 09
console.log('99'.padStart(2, '0')); // 99

Если строка уже достаточной длины, padStart не добавляет символы.

Типичные ошибки

  • Передавать в repeat отрицательное или слишком большое значение.
  • Ожидать, что padStart обрежет длинную строку (он не обрезает).
  • Использовать concat в длинной сборке, где шаблонные строки читаются лучше.
  • Игнорировать normalize при сравнении интернациональных текстов.

Анти-провал: выбирай метод под конкретную задачу, а не «по привычке». Для UI-форматирования padStart/padEnd часто надежнее самодельных циклов.

Краткий итог

  • repeat повторяет строку нужное число раз.
  • padStart и padEnd выравнивают строку до заданной длины.
  • concat склеивает строки, но часто проще шаблонные строки.
  • normalize помогает корректно сравнивать Unicode-строки.
  • Специальные методы нужны для узких, но очень практичных сценариев.