Перейти к содержимому
Тема 9 из 16
Теория

Строки

Зачем это нужно

Текст повсюду: имена, сообщения в чате, адреса страниц, пароли, поиск. Нужно проверять, есть ли в сообщении запрещённое слово, обрезать лишние пробелы в поле ввода, делать первую букву заглавной, разбивать строку на слова. Для всего этого у строк есть методы — встроенные функции, которые вызываются через точку: 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();.

Частые ошибки

  1. Метод не меняет строку. name.toUpperCase(); без присваивания ничего не сделает. Нужно name = name.toUpperCase(); или использовать результат сразу.
  2. Забыли скобки. text.toUpperCase без () — это сама функция, а не результат.
  3. length() со скобками. length — свойство, а не метод: text.length.
  4. Ошибка на единицу в slice. Конец не включается: "abc".slice(0, 2) → "ab".
  5. 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(", ")

Инициалы

Лёгкая+10 XP

Напиши функцию initials(fullName). Она получает имя и фамилию через один пробел и возвращает инициалы заглавными буквами с точками: "anna ivanova" → "A.I.".

initials("Anna Ivanova")   → "A.I."
initials("timur rakhimov") → "T.R."

Подключи коннектор, чтобы решать задачи

Код задач выполняется на твоём компьютере — так быстрее и надёжнее, чем в браузере. Для этого нужна бесплатная программа-коннектор CodeWithMe. Подключить её нужно один раз.

Ищем коннектор на этом компьютере…

  1. 1
    Скачай коннектор для своей системы (Windows, macOS или Linux).Скачать коннекторНа странице загрузки выбери файл со своей системой в названии, например windows-amd64.
  2. 2Запусти его и выбери папку, где будут лежать твои решения. Python и Node.js он поставит туда сам, когда понадобится.
  3. 3
    Введи ниже код из 6 цифр — он написан в окне коннектора («Код для сайта CodeWithMe»). Если браузер спросит про доступ к локальной сети — разреши.

Коннектор открытый (исходный код на GitHub), работает только на твоём компьютере и выполняет код лишь после ввода кода сопряжения.