Строки и шаблонные строки
Строки — один из самых используемых типов данных в JavaScript. Любой текст на экране, любое сообщение, любой URL — это строки. Разберём их подробно: кавычки, конкатенация, шаблонные строки и главные методы работы с текстом.
📜 Строка — это последовательность символов
Строка (string) — это последовательность символов: букв, цифр, пробелов, знаков препинания, эмодзи — чего угодно. Думайте о строке как о бусах: каждая бусина — один символ, все вместе — строка. Символы в строке идут один за другим и имеют порядковые номера (индексы), начиная с 0.
// Строки можно создавать тремя видами кавычек:
let str1 = "Привет, мир!"; // двойные кавычки
let str2 = 'Hello, World!'; // одинарные кавычки
let str3 = `Бэктик-строка`; // обратные кавычки (template literals)
// Нельзя смешивать кавычки:
// let bad = "неправильно'; // ошибка!
// Одинарная кавычка внутри двойных — нормально:
let apostrophe = "It's fine";
// И наоборот:
let quote = 'Он сказал "привет"';
Все три вида кавычек создают строку — разница только в синтаксисе и возможностях. Одинарные и двойные кавычки — одинаковые, это просто вопрос стиля. Обратные кавычки — это шаблонные строки с суперспособностями.
💡 Строки в JavaScript неизменяемы: нельзя изменить отдельный символ в строке. Все операции со строками возвращают новую строку, не меняя исходную.
➕ Конкатенация — склейка строк
Конкатенация — это соединение (склейка) строк. В JavaScript для этого используется оператор +. Тот же плюс, что складывает числа — но если хотя бы один операнд строка, он клеит строки.
let firstName = "Иван";
let lastName = "Петров";
// Конкатенация через +:
let fullName = firstName + " " + lastName;
console.log(fullName); // "Иван Петров"
let age = 25;
let message = "Меня зовут " + firstName + ", мне " + age + " лет";
console.log(message); // "Меня зовут Иван, мне 25 лет"
⚠️ Осторожно: если вы «добавляете» число к строке, получится строка, а не сумма! "Цена: " + 100 + 50 даст "Цена: 10050", а не "Цена: 150". Нужно сначала сложить числа: "Цена: " + (100 + 50).
Конкатенация через + работает, но быстро становится некрасивой. Посмотрите на этот ужас:
// Неудобная конкатенация:
let product = "Ноутбук";
let price = 79990;
let discount = 10;
let msg = "Товар: " + product + ", цена: " + price + "₽, скидка: " + discount + "%. Итого: " + (price * (1 - discount / 100)) + "₽";
// Ужасно читать и легко ошибиться!
Именно для решения этой проблемы и были придуманы шаблонные строки.
✨ Шаблонные строки (Template Literals)
Шаблонные строки — это строки в обратных кавычках (backticks: `), которые поддерживают вставку выражений через синтаксис ${выражение}. Это называется интерполяция.
let name = "Мария";
let age = 28;
let city = "Казань";
// Старый способ (конкатенация):
let old = "Привет, " + name + "! Тебе " + age + " лет. Город: " + city;
// Новый способ (шаблонная строка):
let modern = `Привет, ${name}! Тебе ${age} лет. Город: ${city}`;
console.log(modern);
// Привет, Мария! Тебе 28 лет. Город: Казань
Внутри ${...} можно писать любое JavaScript-выражение — не только переменные, но и вычисления, вызовы функций:
let price = 1000;
let qty = 3;
console.log(`Итого: ${price * qty} ₽`); // Итого: 3000 ₽
console.log(`2 + 2 = ${2 + 2}`); // 2 + 2 = 4
console.log(`Заглавные: ${"hello".toUpperCase()}`); // Заглавные: HELLO
let user = { name: "Антон", isPremium: true };
console.log(`${user.name}: ${user.isPremium ? "Premium" : "Free"}`);
// Антон: Premium
Шаблонные строки также поддерживают многострочный текст без специальных символов:
// Многострочная шаблонная строка:
let html = `
<div class="card">
<h2>${user.name}</h2>
<p>Статус: ${user.isPremium ? "Premium" : "Free"}</p>
</div>
`;
// Переносы строк сохраняются!
✅ Рекомендация: используйте шаблонные строки вместо конкатенации через + везде, где нужно вставить переменную в текст. Код становится чище, понятнее и с меньшим количеством ошибок.
🛠️ Методы строк
У строк есть встроенные методы (функции) для работы с текстом. Метод вызывается через точку после строки: строка.метод(). Разберём самые важные.
.length — длина строки
Это не метод, а свойство — возвращает количество символов в строке (включая пробелы).
let str = "Привет";
console.log(str.length); // 6
console.log("".length); // 0
console.log(" ".length); // 3 (пробелы тоже считаются!)
.toUpperCase() и .toLowerCase() — регистр
Переводят строку в ВЕРХНИЙ или нижний регистр. Оригинальная строка не изменяется — возвращается новая.
let name = "алиса";
console.log(name.toUpperCase()); // "АЛИСА"
console.log(name.toLowerCase()); // "алиса" (не изменилась)
let email = "User@Example.COM";
console.log(email.toLowerCase()); // "user@example.com" — удобно для сравнения email
.includes() — содержит ли строку
Проверяет, содержится ли подстрока внутри строки. Возвращает true или false.
let text = "JavaScript — это круто!";
console.log(text.includes("круто")); // true
console.log(text.includes("Python")); // false
console.log(text.includes("javascript")); // false — регистр важен!
.indexOf() — позиция вхождения
Возвращает индекс (позицию) первого вхождения подстроки. Если не найдено — возвращает -1.
let str = "Привет, мир!";
console.log(str.indexOf("мир")); // 8 (символ 'м' стоит на позиции 8)
console.log(str.indexOf("!")); // 11
console.log(str.indexOf("xyz")); // -1 (не найдено)
.slice(start, end) — вырезать часть строки
Возвращает часть строки от позиции start до end (не включая end). Если end не указан — до конца строки. Отрицательные числа считают с конца.
let str = "JavaScript";
// 0123456789
console.log(str.slice(0, 4)); // "Java"
console.log(str.slice(4)); // "Script" (до конца)
console.log(str.slice(-6)); // "Script" (последние 6 символов)
console.log(str.slice(0, -6)); // "Java"
.replace() — заменить подстроку
Заменяет первое вхождение подстроки на другую строку. Для замены всех вхождений — используйте .replaceAll().
let str = "Привет, мир! Привет, JavaScript!";
console.log(str.replace("Привет", "Здравствуй"));
// "Здравствуй, мир! Привет, JavaScript!" (только первое)
console.log(str.replaceAll("Привет", "Здравствуй"));
// "Здравствуй, мир! Здравствуй, JavaScript!" (все)
.trim() — убрать пробелы по краям
Удаляет пробелы (и пробельные символы) в начале и конце строки. Незаменим при обработке пользовательского ввода — люди часто случайно ставят пробелы перед/после текста.
let input = " Иван ";
console.log(input.trim()); // "Иван"
console.log(input.trimStart()); // "Иван " (только начало)
console.log(input.trimEnd()); // " Иван" (только конец)
.split(separator) — разбить строку на массив
Разбивает строку на массив подстрок по указанному разделителю. Обратная операция — .join() у массивов.
let str = "яблоко,банан,апельсин";
let fruits = str.split(",");
console.log(fruits); // ["яблоко", "банан", "апельсин"]
let sentence = "Привет мир";
let words = sentence.split(" ");
console.log(words); // ["Привет", "мир"]
let chars = "JS".split("");
console.log(chars); // ["J", "S"] (разбить на символы)
✅ Итоги урока
- Строка — последовательность символов. Создаётся в одинарных, двойных или обратных кавычках
- Конкатенация через
+— склейка строк, но быстро становится неудобной - Шаблонные строки (
`${переменная}`) — современный и чистый способ подставить значения в текст .length— длина строки.toUpperCase()/.toLowerCase()— изменение регистра.includes()— проверить, содержит ли строку подстроку (true/false).indexOf()— найти позицию подстроки (-1 если не найдено).slice(start, end)— вырезать часть строки.replace()/.replaceAll()— замена подстроки.trim()— убрать пробелы по краям.split()— разбить строку на массив по разделителю
В следующем уроке погружаемся в числа: арифметика, инкремент/декремент и мощный объект Math. 🚀
Тест: Строки и шаблонные строки
7 вопросов