Строки
Зачем это нужно
Текст повсюду: имена, сообщения в чате, адреса страниц, пароли, поиск. Нужно проверять, есть ли в
сообщении запрещённое слово, обрезать лишние пробелы в поле ввода, делать первую букву заглавной,
разбивать строку на слова. Для всего этого у строк есть методы — встроенные функции,
которые вызываются через точку: text.toUpperCase().
Длина и отдельные символы
const word = "JavaScript";
console.log(word.length); // 10
console.log(word[0]); // J — нумерация с нуля!
console.log(word[4]); // S
console.log(word.at(-1)); // t — at(-1): последний символ
console.log(word[word.length - 1]); // t — то же самое по-старому
Символы нумеруются с нуля: у строки длиной 10 номера (индексы) от 0 до 9.
Строки неизменяемы: word[0] = "j" ничего не поменяет. Все методы возвращают новую строку,
а исходная остаётся прежней.
Регистр
const city = "Dushanbe";
console.log(city.toUpperCase()); // DUSHANBE
console.log(city.toLowerCase()); // dushanbe
console.log(city); // Dushanbe — оригинал не изменился
Сделать первую букву заглавной: s[0].toUpperCase() + s.slice(1).
Поиск
const text = "Я учу JavaScript и HTML";
console.log(text.includes("Java")); // true — есть ли подстрока
console.log(text.startsWith("Я")); // true
console.log(text.endsWith("CSS")); // false
console.log(text.indexOf("HTML")); // 19 — где начинается
console.log(text.indexOf("Python")); // -1 — не найдено
Поиск чувствителен к регистру: "Java".includes("java") → false. Чтобы искать без учёта
регистра, приведи обе строки к нижнему регистру.
Вырезать кусок: slice
slice(начало, конец) возвращает часть строки от начало до конец (не включая его):
const s = "JavaScript";
console.log(s.slice(0, 4)); // Java
console.log(s.slice(4)); // Script — до конца
console.log(s.slice(-3)); // ipt — три последних
Замена, обрезка, повтор
console.log("кот и кот".replace("кот", "пёс")); // пёс и кот — только первое
console.log("кот и кот".replaceAll("кот", "пёс")); // пёс и пёс — все
console.log(" привет ".trim()); // "привет" — без пробелов по краям
console.log("ха".repeat(3)); // хахаха
console.log("7".padStart(3, "0")); // 007 — дополнить слева до длины 3
Разбить и склеить: split и join
const csv = "яблоко,банан,вишня";
const fruits = csv.split(",");
console.log(fruits);
console.log(fruits.length);
console.log(fruits.join(" + "));
Вывод:
["яблоко","банан","вишня"]
3
яблоко + банан + вишня
split превращает строку в массив кусков (о массивах — в следующих темах), а join склеивает
массив обратно в строку. split("") разбивает на отдельные символы.
Перебор символов
let vowels = 0;
for (const ch of "programming") {
if ("aeiou".includes(ch)) vowels++;
}
console.log(vowels);
Вывод:
3
for (const ch of строка) по очереди кладёт в ch каждый символ.
Спецсимволы
Внутри строки обратный слеш \ начинает спецсимвол: \n — перенос строки, \t — табуляция,
\" — кавычка внутри строки в таких же кавычках, \\ — сам обратный слеш.
console.log("Строка 1\nСтрока 2");
Вывод:
Строка 1
Строка 2
Как это работает внутри
Строка хранится как последовательность символов в кодировке UTF-16. Сравнение "a" < "b" идёт по
кодам символов: "a".charCodeAt(0) → 97. Поэтому "Z" < "a" — истина (у заглавных коды меньше),
а сортировка русских слов с буквой «ё» может удивить: её код стоит отдельно от остального алфавита.
Из-за неизменяемости каждый вызов метода создаёт новую строку. Если нужно что-то «поменять» в строке,
результат обязательно сохраняют: name = name.trim();.
Частые ошибки
- Метод не меняет строку.
name.toUpperCase();без присваивания ничего не сделает. Нужноname = name.toUpperCase();или использовать результат сразу. - Забыли скобки.
text.toUpperCaseбез()— это сама функция, а не результат. length()со скобками.length— свойство, а не метод:text.length.- Ошибка на единицу в
slice. Конец не включается:"abc".slice(0, 2)→"ab". replaceменяет только первое вхождение. Для всех —replaceAll.
Шпаргалка
| Что | Как |
|---|---|
| Длина | s.length |
| Символ | s[0], s.at(-1) |
| Регистр | s.toUpperCase(), s.toLowerCase() |
| Есть ли | s.includes("x"), startsWith, endsWith |
| Где | s.indexOf("x") → номер или -1 |
| Кусок | s.slice(от, до) |
| Замена | s.replace(a, b), s.replaceAll(a, b) |
| Пробелы по краям | s.trim() |
| Повтор, дополнение | s.repeat(3), s.padStart(3, "0") |
| В массив и обратно | s.split(","), arr.join(", ") |