Для создания строк мы можем как напрямую присваивать переменной или константе строку:
const message = "Hello";
Для работы со строками предназначен объект String, поэтому также можно использовать конструктор String:
const message = new String("Hello");
Но как правило, используется первый более краткий способ. В первом случае JavaScript при необходимости автоматически преобразует переменную примитивного типа в объект String.
С помощью индексов можно обращаться к отдельным символам строки, как к элементам массива (как и в массивах индексация начинается с нуля):
const message = "Hello"; console.log(message[0]); // H console.log(message[4]); // o
Объект String имеет большой набор свойств и методов, с помощью которых мы можем манипулировать строками.
Свойство length указывает на длину строки:
const message = "Hello"; console.log(message.length); // 5 символов
Метод repeat() позволяет создать строку путем многократного повторения другой строки. Количество повторов передается в качестве аргумента:
const message = "hello "; console.log(message.repeat(3)); // hello hello hello
Для поиска в строке некоторой подстроки используются методы indexOf() (индекс первого вхождения подстроки) и lastIndexOf() (индекс последнего вхождения подстроки). Эти методы принимают два параметра:
indexOf(str, index) lastIndexOf(str, index)
Подстроку, которую надо найти
Индекс, с которого идет поиск (Необязательный параметр)
Оба этих метода возвращают индекс символа, с которого в строке начинается подстрока. Если подстрока не найдена, то возвращается число -1.
const hello = "привет мир. пока мир"; const key = "мир"; const firstPos = hello.indexOf(key); const lastPos = hello.lastIndexOf(key); console.log("Первое вхождение: ", firstPos); // 7 console.log("Последнее вхождение: ", lastPos); // 17
Применим поиск относительно индекса, например, начиная с индекса 10:
const hello = "привет мир. пока мир"; const key = "мир"; const firstPos = hello.indexOf(key, 10); // поиск с 10-го индекса console.log("Первое вхождение: ", firstPos); // 17
Следует учитывать, что поиск регистрозависимый:
const hello = "привет мир. пока мир"; const key = "Мир"; const firstPos = hello.indexOf(key); console.log(firstPos); // -1
Еще один метод - includes() возвращает true, если строка содержит определенную подстроку.
const hello = "привет мир. пока мир"; console.log(hello.includes("мир")); // true console.log(hello.includes("миг")); // false
С помощью второго дополнительного параметра можно определить индекс, с которого будет начинаться поиск подстроки:
const hello = "привет мир. пока мир"; console.log(hello.includes("мир", 5)); // true console.log(hello.includes("привет", 6)); // false
Для того, чтобы вырезать из строки подстроку, применяются методы substring() и slice().
Метод substring() принимает два параметра:
substring(startIndex, endIndex)
индекс символа в строке, начиная с которого надо проводить обрезку строки. Обязательный параметр
индекс, до которого надо обрезать строку. Необязательный параметра - если он не указан, то обрезается вся остальная часть строки
const hello = "привет мир. пока мир"; const world = hello.substring(7, 10); // с 7-го по 10-й индекс console.log(world); // мир const bye = hello.substring(12); // c 12 индекса до конца строки console.log(bye); // пока мир
Метод slice также позволяет получить из строки какую-то ее часть. Она принимает два параметра:
slice(startIndex, endIndex)
Начальный индекс подстроки в строке. Обязательный параметр
Конечный индекс подстроки в строке. Необязательный параметра - если он не указан, то обрезается вся остальная часть строки
const hello = "привет мир. пока мир"; const world = hello.slice(7, 10); // с 7-го по 10-й индекс console.log(world); // мир const bye = hello.slice(12); // c 12 индекса до конца строки console.log(bye); // пока мир
Можно заметить, что этот метод похож на метод substring()
, тем не менее между ними есть небольшие различие.
Прежде всего, в slice()
начальный индекс должен быть меньше чем конечный. В substring()
, если начальный индекс больше конечного, то они меняются местами
(то есть substring(5, 1)
будет равноценно substring(1, 5)
):
const hello = "привет мир. пока мир"; const world1 = hello.slice(6, 0); // не работает console.log(world1); // пустая строка const world2 = hello.substring(6, 0); // аналогично hello.substring(0, 6) console.log(world2); // привет
Другое отличие, что slice
позволяет использовать отрицательные индексы. Отрицательный индекс указывает на индекс символа относительно конца строки.
substring()
же отрицательные индексы не поддерживает:
const hello = "привет мир. пока мир"; const bye1 = hello.slice(-8, -4); // с 8-го индекса с конца до 4 индекса с конца console.log(bye1); // пока const bye2 = hello.substring(-8, -4); // не работает console.log(bye2); //
Следует отметить, что еще есть метод substr(). Этот метод не является частью стандарта и в целом не рекомендуется к использованию, однако он все еще может поддерживаться браузерами, и его до сих пор можно встретить в различных программах. Он принимает два параметра:
substr(startIndex, count)
Начальный индекс подстроки в строке. Обязательный параметр
Количество выбираемых символов. Необязательный параметра - если он не указан, то выбирается вся остальная часть строки
Применение:
const hello = "привет мир. пока мир"; const world = hello.substr(7, 3); // с 7-го индекса 3 символа console.log(world); // мир const bye = hello.substr(12); // с 12-го индекса до конца console.log(bye); // пока мир
Для изменения регистра символов имеются методы toLowerCase() (для перевода в нижний регистр) и toUpperCase() (для перевода в верхний регистр).
const hello = "Привет Том"; console.log(hello.toLowerCase()); // привет том console.log(hello.toUpperCase()); // ПРИВЕТ ТОМ
Чтобы получить определенный символ в строке по индексу, можно применять синтаксис массивов. Но также JavaScript предоставляет методы charAt() и charCodeAt(). Оба этих метода в качестве параметра принимают индекс символа:
const hello = "Привет Том"; console.log(hello.charAt(2)); // и console.log(hello.charCodeAt(2)); // 1080
Но если в качестве результата метод charAt()
возвращает сам символ, то метод charCodeAt()
возвращает числовой код
этого символа.
Для удаления начальных и концевых пробелов в стоке используется метод trim():
let hello = " Привет Том "; const beforeLength = hello.length; hello = hello.trim(); const afterLength = hello.length; console.log("Длина строки до: ", beforeLength); // 15 console.log("Длина строки после: ", afterLength); // 10
Дополнительно есть ряд методов, которые удаляют пробелы с определенной стороны строки:
trimStart(): удаляет пробел с начала строки (в зависимости от того, является ли письмо правостронним или левостронним, это может быть правый или левый край строки)
trimEnd(): удаляет пробел с конца строки (в зависимости от того, является ли письмо правостронним или левостронним, это может быть правый или левый край строки)
trimLeft(): удаляет пробел с левой части строки
trimRight(): удаляет пробел с правой части строки
Метод concat() объединяет две строки:
let hello = "Привет "; const world = "мир"; hello = hello.concat(world); console.log(hello); // Привет мир
Метод replace() заменяет первое вхождение одной подстроки на другую:
let hello = "Добрый день"; hello = hello.replace("день", "вечер"); console.log(hello); // Добрый вечер
Первый параметр метода указывает, какую подстроку надо заменить, а второй параметр - на какую подстроку надо заменить.
В то же время у этого метода есть одна особенность - он заменяет только первое вхождение подстроки:
let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай."; menu = menu.replace("чай", "кофе"); console.log(menu); // Завтрак: каша, кофе. Обед: суп, чай. Ужин: салат, чай.
Однако еще один метод - replaceAll() позволяет заменить все вхождения подстроки:
let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай."; menu = menu.replaceAll("чай", "кофе"); console.log(menu); // Завтрак: каша, кофе. Обед: суп, кофе. Ужин: салат, кофе.
Метод split() разбивает строку на массив подстрок по определенному разделителю. В качестве разделителя используется строка, которая передается в метод:
const message = "Сегодня была прекрасная погода"; const messageParts = message.split(" "); console.log(messageParts); // ["Сегодня", "была", "прекрасная", "погода"]
В данном случае строка разделяется по проблему, то есть в итоге в массиве messageParts окажется четыре элемента.
Метод startsWith() возвращает true, если строка начинается с определенной подстроки. А метод endsWith() возвращает true, если строка оканчивается на определенную подстроку.
const hello = "let me speak from my heart"; console.log(hello.startsWith("let")); // true console.log(hello.startsWith("Let")); // false console.log(hello.startsWith("lets")); // false console.log(hello.endsWith("heart")); // true console.log(hello.startsWith("bart")); // false
При этом играет роль регистр символов, и из примера выше мы видим, что "let" не эквивалентно "Let".
Дополнительный второй параметр позволяет указать индекс (для startsWith - индекс с начала, а для endsWith - индекс с конца строки), относительно которого будет производиться сравнение:
const hello = "let me speak from my heart"; console.log(hello.startsWith("me", 4)); // true, "me" - 4 индекс с начала строки console.log(hello.startsWith("my", hello.length-8)); // true, "my" - 8 индекс с конца
Методы padStart() и padEnd() растянуть строку на определенное количество символов и заполнить строку слева и справа соответственно.
let hello = "hello".padStart(8); // " hello" console.log(hello); hello = "hello".padEnd(8); // "hello " console.log(hello);
Вызов "hello".padStart(8)
будет рястягивать строку "hello" на 8 символов. То есть изначально в строке "hello" 5 символов, значит, к ней будет добавлено 3 символа. При чем они будут добавлено в начале строки.
По умолчанию добавляемые символы представляют пробелы. Аналогично вызов "hello".padEnd(8)
растянет строку на 8 символов, но оставшие символы в виде пробелов будут добавлены в конец строки.
По умолчанию эти методы используют пробелы для заполнения, но в качестве второго параметра мы можем передать методам значение, которым надо дополнить строку:
let hello = "hello".padStart(17, "JavaScript, "); // "JavaScript, hello" hello = "hello".padEnd(12, " Eugene"); // "hello Eugene"
Если добавляемое количество символов больше добавляемой строки, то добавляемая строка повторяется:
let hello = "123".padStart(6, "0"); // "000123" hello = "123".padEnd(6, "0"); // "123000"