W3docs

Строки в JavaScript

В JavaScript строки используются для хранения и обработки текста. Узнайте, как создавать строки, работать с ними и выполнять сравнения.

В JavaScript строки используются для хранения и обработки текста. В отличие от некоторых других языков, в JavaScript нет отдельного типа для одиночного символа — символ — это просто строка длиной 1. Внутренний формат каждой строки всегда UTF-16, поэтому каждый символ соответствует числовому коду (подробнее об этом ниже).

Строка представляет ноль или более символов, заключённых в кавычки. Строки — один из примитивных типов данных JavaScript, однако они предоставляют множество полезных методов — см. методы примитивов, чтобы узнать, как примитив может иметь методы.

На этой странице вы узнаете, как создавать строки (с одинарными, двойными кавычками и обратными кавычками), использовать специальные символы, читать длину строки, обращаться к отдельным символам, извлекать подстроки, менять регистр, выполнять поиск внутри строки и корректно сравнивать строки.

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

ФункцияОписание
charAt(index)Возвращает символ по указанному индексу.
charCodeAt(index)Возвращает Unicode-код символа по указанному индексу.
concat(...strings)Объединяет строковые аргументы с вызывающей строкой и возвращает новую строку.
includes(searchString, position)Определяет, содержит ли вызывающая строка searchString.
indexOf(searchValue, fromIndex)Возвращает индекс первого вхождения searchValue в строке, начиная поиск с позиции fromIndex. Возвращает -1, если значение не найдено.
lastIndexOf(searchValue, fromIndex)Возвращает индекс последнего вхождения searchValue в вызывающей строке, выполняя поиск в обратном направлении от fromIndex. Возвращает -1, если значение не найдено.
match(regexp)Возвращает совпадения при сопоставлении строки с регулярным выражением.
matchAll(regexp)Возвращает итератор всех результатов сопоставления строки с регулярным выражением, включая группы захвата.
repeat(count)Возвращает новую строку, состоящую из вызывающей строки, повторённой count раз.
replace(searchFor, replaceWith)Заменяет первое совпадение подстроки или шаблона на строку замены.
replaceAll(searchFor, replaceWith)Заменяет все совпадения подстроки или шаблона на строку замены.
search(regexp)Выполняет поиск совпадения с регулярным выражением в строке и возвращает индекс совпадения.
slice(startIndex, endIndex)Извлекает часть строки и возвращает её как новую строку, не изменяя исходную.
split(separator, limit)Разделяет строку на упорядоченный список подстрок, помещает их в array и возвращает этот array. Разделение выполняется по шаблону, передаваемому первым параметром метода.
startsWith(searchString, position)Определяет, начинается ли вызывающая строка с символов searchString.
substring(startIndex, endIndex)Возвращает часть строки между начальным и конечным индексами или до конца строки.
toLowerCase()Возвращает вызывающую строку, преобразованную к нижнему регистру.
toUpperCase()Возвращает вызывающую строку, преобразованную к верхнему регистру.
trim()Удаляет пробельные символы с обоих концов строки.
trimStart() или trimLeft()Удаляет пробельные символы в начале строки.
trimEnd() или trimRight()Удаляет пробельные символы в конце строки.
valueOf()Возвращает примитивное значение объекта String.

О кавычках

JavaScript предоставляет три способа заключить строку в кавычки: одинарные кавычки, двойные кавычки и обратные кавычки:

let single = 'single-quoted';
let double = "double-quoted";
let backticks = `backticks`;

Одинарные и двойные кавычки ведут себя одинаково — выберите один стиль и придерживайтесь его. Обратные кавычки отличаются: они поддерживают шаблонные литералы, позволяя встраивать любое выражение непосредственно в строку, обернув его в ${…}:

javascript— editable

Выражение внутри ${…} может быть чем угодно — переменной, вычислением или вызовом функции:

javascript— editable

Ещё одно важное преимущество обратных кавычек — они позволяют строке занимать несколько строк:

javascript— editable

Одинарные и двойные кавычки сами по себе не могут охватывать несколько строк. Вставка обычного переноса строки внутри них является синтаксической ошибкой:

let guestList = "Guests: // SyntaxError: Invalid or unexpected token
* John ";

Одинарные и двойные кавычки появились раньше обратных, поэтому обратные кавычки — более мощный и современный вариант.

Также перед первой обратной кавычкой можно поместить «функцию-тег» (тегированный шаблон):

func`string`;

Функция func вызывается автоматически и получает буквальные части строки вместе со встроенными выражениями, что позволяет обрабатывать их. Так библиотеки реализуют пользовательские шаблоны, однако в повседневном коде это применяется редко.

Специальные символы

Вы можете создать многострочный вывод из строк с одинарными или двойными кавычками с помощью \n (символа новой строки):

javascript— editable

Существуют и другие, менее распространённые специальные символы.

Некоторые из них приведены в списке ниже:

  • \', \" — эти специальные символы используются для кавычек
  • \r — возврат каретки. Этот символ сейчас используется отдельно редко. Комбинация двух символов \r\n применяется для обозначения переноса строки в текстовых файлах Windows.
  • \\ — обратная косая черта
  • \t — табуляция
  • \xXX — символ Unicode с конкретным шестнадцатеричным кодом XX
  • \uXXXX — символ Unicode с шестнадцатеричным кодом XXXX в кодировке UTF-16. Должен содержать ровно 4 цифры.

Вот примеры с экранированием Unicode:

javascript— editable

Каждый специальный символ начинается с обратной косой черты, поэтому её также называют символом экранирования. Вы можете использовать её для вставки кавычки того же типа внутри строки:

javascript— editable

Обратная косая черта существует только для того, чтобы сообщить JavaScript, как читать исходный код — она исчезает после создания строки и не хранится в памяти. Если вам нужна обратная косая черта в самой строке, удвойте её:

javascript— editable

Длина строки

Свойство length возвращает количество символов в строке:

javascript— editable

Обратите внимание, что \n — это один специальный символ, поэтому длина равна 7 (W3Docs плюс один символ новой строки), а не 8.

Распространённая ошибка — вызов str.length() вместо обращения к str.length. length — это свойство, а не метод: добавление () вызывает ошибку «not a function».

Доступ к символам

Квадратные скобки [pos] — обычный способ получить символ по заданной позиции. Также можно вызвать метод str.charAt(pos). Позиции отсчитываются с нуля, поэтому первый символ находится по индексу 0:

javascript— editable

Одно отличие: если символа по указанной позиции не существует, str[pos] возвращает undefined, тогда как str.charAt(pos) возвращает пустую строку ''. В современном коде обычно предпочитают квадратные скобки; charAt сегодня используется редко.

Неизменяемость строк

Строки в JavaScript иммутабельны — изменить символ на месте невозможно. Присваивание, показанное ниже, молча завершается неудачей (в строгом режиме выбрасывает исключение), поэтому исходный символ остаётся неизменным:

javascript— editable

Вместо этого создайте совершенно новую строку и присвойте её переменной:

javascript— editable

Изменение регистра

Два метода изменяют регистр всей строки — toUpperCase() и toLowerCase():

javascript— editable

Чтобы перевести в нижний регистр только один символ, сначала обратитесь к нужному индексу строки, затем вызовите метод для этого символа:

javascript— editable

Поиск подстроки

Существует несколько способов найти подстроку внутри строки.

str.indexOf

str.indexOf(substr, pos) ищет substr внутри str, опционально начиная с позиции pos. Возвращает индекс первого совпадения или -1, если совпадение не найдено:

javascript— editable

str.lastIndexOf

str.lastIndexOf(substr, pos) работает как indexOf, но выполняет поиск с конца строки к началу, возвращая индекс последнего совпадения.

Частая ошибка — использование indexOf непосредственно в условии if. Поскольку совпадение на позиции 0 является ложным значением, следующий код выглядит правильным, но работает неверно:

javascript— editable

Всегда сравнивайте результат с -1:

javascript— editable

includes, startsWith, endsWith

Более современный str.includes(substr, pos) возвращает true или false в зависимости от того, содержит ли str подстроку substr. Используйте его, когда вам нужно знать лишь наличие совпадения, а не его позицию:

javascript— editable

Необязательный второй аргумент — позиция, с которой начинается поиск:

javascript— editable

str.startsWith(substr) и str.endsWith(substr) тесно связаны с ним — они проверяют начало и конец строки:

javascript— editable

Извлечение подстроки

В JavaScript есть три метода для получения подстроки: slice, substring и substr. В современном коде рекомендуется использовать slice — он наиболее гибкий, а substr считается устаревшим.

str.slice(start, end)

slice возвращает часть строки от start до end (не включая end):

javascript— editable

Если второй аргумент опущен, slice продолжает работу до конца строки:

javascript— editable

Также можно использовать отрицательные значения, которые отсчитываются с конца:

javascript— editable

str.substring(start, end)

substring возвращает часть строки между start и end. Он похож на slice, но есть важное отличие: если start больше end, substring меняет аргументы местами, тогда как slice возвращает пустую строку. Отрицательные аргументы также трактуются как 0:

javascript— editable

str.substr(start, length)

substr возвращает часть строки начиная с позиции start заданной length длины. В отличие от остальных, второй аргумент — это длина, а не конечная позиция. Этот метод является устаревшим — в новом коде предпочитайте slice.

javascript— editable

Отрицательный start отсчитывается с конца:

javascript— editable

Сравнение строк

Операторы <, >, <= и >= сравнивают строки посимвольно, используя Unicode-код каждого символа (общие правила см. в операторах сравнения). Два следствия часто удивляют новичков:

  1. Строчная буква «больше» прописной, поскольку строчные буквы имеют более высокие коды:
javascript— editable
  1. Буквы с диакритическими знаками сортируются «не по порядку» — они находятся за пределами базового диапазона A–Z, поэтому сравниваются как большие:
javascript— editable

Поэтому операторы сравнения подходят для сортировки строго по коду, но не для алфавитного порядка, понятного человеку. Для сравнения с учётом локали используйте str.localeCompare(other), который возвращает отрицательное число, 0 или положительное число:

javascript— editable

Символы и их коды

Поскольку строки хранятся в формате UTF-16, каждый символ имеет числовой код. str.codePointAt(pos) возвращает код символа на позиции pos:

javascript— editable

String.fromCodePoint(code) выполняет обратную операцию — создаёт символ из числового кода:

javascript— editable

Также можно вставить символ по его коду в строковый литерал, используя \u перед шестнадцатеричным кодом:

javascript— editable

В качестве более полного примера — строка, построенная из символов с кодами 65..220:

javascript— editable

Сначала идут прописные буквы, затем несколько специальных символов, и вывод заканчивается примерно на Ö.

Связанные темы

Практика

Практика
Какие характеристики или функции строк в JavaScript описаны в статье?
Какие характеристики или функции строк в JavaScript описаны в статье?
Was this page helpful?