Методы получения информации о строке

Методы получения информации о строке

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

Методы этого урока не изменяют строку, а только читают информацию о ней: длину, символ, позицию, код символа.
Это важно, потому что строка в 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, результат будет «не найдено».

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

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

  1. Проверка логина перед отправкой формы.
function validateLogin(login) {
  return login.length >= 3 && login.at(0) !== ' ';
}
  1. Определение расширения файла.
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 полезен для низкоуровневых проверок символов.
  • Всегда обрабатывай случаи «не найдено» и пустой ввод.