Методы получения информации о строке
Методы получения информации о строке
Технический фундамент методов чтения строки
Методы этого урока не изменяют строку, а только читают информацию о ней: длину, символ, позицию, код символа.
Это важно, потому что строка в JS неизменяемая, и «методы чтения» безопасны для исходного значения.
const source = 'abc';
const size = source.length;
const first = source.charAt(0);
console.log(source); // abc
console.log(size, first); // 3 'a'
Ключевой момент: после любых операций чтения исходная строка остается прежней.
База: length, charAt, at
length показывает количество символов в строке.
const username = 'alex_dev';
console.log(username.length); // 8
charAt(index) возвращает символ по индексу.
const tag = '#frontend';
console.log(tag.charAt(0)); // #
console.log(tag.charAt(1)); // f
console.log(tag.charAt(100)); // '' (пустая строка)
Смотри, что важно: при выходе за границы charAt(...) возвращает '', а доступ по индексу возвращает undefined.
Это влияет на проверки и дальнейшие вызовы методов:
console.log('#frontend'[100]); // undefined
Новый термин: at(index) — современный метод, который тоже возвращает символ, но умеет отрицательные индексы.
const word = 'JavaScript';
console.log(word.at(0)); // J
console.log(word.at(-1)); // t
console.log(word.at(-2)); // p
Ключевой момент: для «последнего символа» at(-1) обычно читается проще, чем word[word.length - 1].
Проверь себя: что вернет at(-1) для пустой строки ''?
Подсказка: undefined (потому что индекса нет).
Позиция символа: indexOf и lastIndexOf
Когда нужно узнать, где встречается символ или подстрока, используют indexOf.
const email = 'team.support@company.com';
console.log(email.indexOf('@')); // 12
console.log(email.indexOf('support')); // 5
console.log(email.indexOf('admin')); // -1
-1 означает «не найдено». Это очень частый источник ошибок: новичок забывает проверить -1, и логика идет дальше как будто все хорошо.
Еще одна ловушка: нельзя писать if (str.indexOf('x')) { ... }.
Потому что 0 - это false, а -1 - это true.
const str = 'abc';
if (str.indexOf('a')) console.log('есть a'); // не выполнится (0 -> false)
if (str.indexOf('z')) console.log('есть z'); // выполнится (-1 -> true) это баг
if (str.indexOf('a') !== -1) console.log('есть a'); // правильно
lastIndexOf ищет с конца.
const fileName = 'report.final.v2.pdf';
console.log(fileName.lastIndexOf('.')); // 15
Это удобно, когда нужно отделить расширение файла.
Код символа: charCodeAt
charCodeAt(index) возвращает числовой Unicode-код символа.
const letter = 'A';
console.log(letter.charCodeAt(0)); // 65
Зачем это может понадобиться: простые проверки диапазонов (A-Z, a-z, 0-9) в учебных задачах или при кастомной валидации.
function isDigit(char) {
const code = char.charCodeAt(0);
return code >= 48 && code <= 57;
}
console.log(isDigit('7')); // true
console.log(isDigit('x')); // false
Что будет, если изменить вход
const value = 'abc';
console.log(value.indexOf('a')); // 0
console.log(value.indexOf('A')); // -1
Поиск чувствителен к регистру. Если пользователь ввел A, а ты ищешь a, результат будет «не найдено».
Анти-провал: заранее решай, нужен чувствительный к регистру поиск или нет.
Микро-сценарии
- Проверка логина перед отправкой формы.
function validateLogin(login) {
return login.length >= 3 && login.at(0) !== ' ';
}
- Определение расширения файла.
function getExtension(fileName) {
const dotIndex = fileName.lastIndexOf('.');
return dotIndex === -1 ? '' : fileName.slice(dotIndex + 1);
}
Типичные ошибки
- Путать
charAtи доступ по индексу при выходе за границы. - Забывать, что
indexOfвозвращает-1, а неfalse. - Игнорировать регистр при поиске.
- Вызывать
charCodeAtу пустой строки.
Краткий итог
lengthдает длину строки.charAtиatвозвращают символ по позиции (atудобен с-1).indexOf/lastIndexOfпомогают найти позицию подстроки.charCodeAtполезен для низкоуровневых проверок символов.- Всегда обрабатывай случаи «не найдено» и пустой ввод.