Методы проверки и сравнения строк
Методы проверки и сравнения строк
Технический фундамент проверки и сравнения
Строковое сравнение в 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, когда важна корректная локальная сортировка.
Микро-сценарии
- Проверка домена email.
function isCompanyEmail(email) {
return email.trim().toLowerCase().endsWith('@company.com');
}
- Сравнение статусов из API.
function isCompleted(status) {
return status.trim().toLowerCase() === 'completed';
}
Типичные ошибки
- Сравнивать «грязные» строки без
trim(). - Полагаться на
==вместо===. - Игнорировать регистр.
- Сортировать текст через числовую логику без
localeCompare.
Анти-провал: всегда решай заранее, должно ли сравнение быть чувствительным к регистру и локали.
Краткий итог
- Для точного сравнения строк используй
===и!==. includes/startsWith/endsWithудобны для проверок формата.- Нормализация (
trim+toLowerCase) снижает число ложных ошибок. localeCompareнужен для корректного языкового сравнения и сортировки.- Правильная стратегия сравнения зависит от бизнес-правила, а не от привычки.