Методы проверки и сравнения строк

Методы проверки и сравнения строк

Технический фундамент проверки и сравнения

Строковое сравнение в JS детерминировано: сравниваются точные последовательности символов, включая регистр и пробелы.
Поэтому стратегия обычно двухшаговая: сначала нормализация, затем сравнение.

const a = ' Admin ';
const b = 'admin';

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

Ключевой момент: без нормализации логически одинаковые значения часто выглядят "разными" для языка.

Базовое сравнение: === и !==

Для точного сравнения строк используй строгое равенство ===.

console.log('admin' === 'admin'); // true
console.log('admin' === 'Admin'); // false
console.log('10' === 10); // false

Здесь часто путаются: сравнение строк чувствительно к регистру и типу.

Проверь себя: почему 'ok' === 'ok ' возвращает false?

Проверки условий: includes, startsWith, endsWith

Эти методы тоже участвуют в проверках.

const path = '/api/users/42';

console.log(path.startsWith('/api')); // true
console.log(path.includes('users')); // true
console.log(path.endsWith('/42')); // true

Они не сравнивают всю строку, а проверяют наличие или позицию части строки.

Нормализация перед проверкой

Типовой безопасный паттерн:

function isAdminRole(value) {
  return value.trim().toLowerCase() === 'admin';
}

console.log(isAdminRole(' Admin ')); // true

Смотри, что важно: если value может быть не строкой (null, undefined, число), такой код упадет на .trim(). На границе модуля (входы из формы/API) добавляй простую проверку:

function isAdminRoleSafe(value) {
  if (typeof value !== 'string') return false;
  return value.trim().toLowerCase() === 'admin';
}

Если убрать trim() или toLowerCase(), часть корректных кейсов начнет падать.

Сравнение с учетом языка: localeCompare

Новый термин: localeCompare — метод, который сравнивает строки по языковым правилам и возвращает число:

  • < 0 — первая строка «меньше» второй,
  • 0 — равны,
  • > 0 — первая «больше» второй.
console.log('apple'.localeCompare('banana')); // отрицательное число
console.log('cat'.localeCompare('cat')); // 0

Практический кейс: сортировка списка имен.

const names = ['Яна', 'Антон', 'Борис'];
names.sort((a, b) => a.localeCompare(b, 'ru'));

console.log(names); // ['Антон', 'Борис', 'Яна']

Это лучше, чем простое a > b, когда важна корректная локальная сортировка.

Микро-сценарии

  1. Проверка домена email.
function isCompanyEmail(email) {
  return email.trim().toLowerCase().endsWith('@company.com');
}
  1. Сравнение статусов из API.
function isCompleted(status) {
  return status.trim().toLowerCase() === 'completed';
}

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

  • Сравнивать «грязные» строки без trim().
  • Полагаться на == вместо ===.
  • Игнорировать регистр.
  • Сортировать текст через числовую логику без localeCompare.

Анти-провал: всегда решай заранее, должно ли сравнение быть чувствительным к регистру и локали.

Краткий итог

  • Для точного сравнения строк используй === и !==.
  • includes/startsWith/endsWith удобны для проверок формата.
  • Нормализация (trim + toLowerCase) снижает число ложных ошибок.
  • localeCompare нужен для корректного языкового сравнения и сортировки.
  • Правильная стратегия сравнения зависит от бизнес-правила, а не от привычки.