JavaScript строки

Строка в JavaScript — это значение для хранения текста: например, имени пользователя, сообщения или адреса. Встроенный String позволяет преобразовывать значения в строки, а строковые методы — искать, извлекать и заменять фрагменты текста.

Строки и UTF-16

Строки неизменяемы. Индексы и length измеряются в кодовых единицах UTF-16: "😀".length равно 2. Итерация for...of учитывает кодовые точки, но не объединяет составные видимые символы. String(value) возвращает примитив, new String(value) — объект-обёртку. String() даёт пустую строку. Индексные свойства строковой обёртки доступны только для чтения.

Ниже отдельно перечислены собственные статические методы String и методы его прототипа. Общие унаследованные возможности других объектов в таблицы не включены.

Статические методы String

Статические методы String
Метод Описание
fromCharCode() Создаёт строку из кодовых единиц UTF-16. Аргументы преобразуются в беззнаковые 16-битные целые.
fromCodePoint() Преобразует значение или значения кодовых точек в стандарте кодирования символов Юникод в символы и возвращает строковое значение. Позволяет работать со значениями выше 65535.
raw() Возвращает необработанную строковую форму строки шаблона.

Методы экземпляра String

Методы экземпляра String
Метод Описание
charAt() Возвращает одну кодовую единицу UTF-16 по индексу, вне диапазона — пустую строку.
charCodeAt() Возвращает числовое значение кодовой единицы UTF-16 по индексу, вне диапазона — NaN.
codePointAt() Возвращает неотрицательное целое число, являющееся значением кодовой точки в стандарте кодирования символов Unicode (Юникод).
concat() Используется для объединения двух, или более строк в одну, при этом метод не изменяет существующие строки, а возвращает новую строку.
endsWith() Определяет, совпадает ли конец данной строки с указанной строкой, или символом, возвращая при этом логическое значение.
includes() Определяет, содержится ли одна строка внутри другой строки, возвращая при этом логическое значение.
indexOf() Возвращает позицию первого найденного вхождения указанного значения в строке.
lastIndexOf() Возвращает позицию последнего найденного вхождения указанного значения в строке.
localeCompare() Возвращает отрицательное число, ноль или положительное число в зависимости от порядка строк при локализованном сравнении. Не гарантирует именно -1 или 1.
match() Производит поиск по заданной строке с использованием регулярного выражения (глобальный объект RegExp) и возвращает массив, содержащий результаты этого поиска.
normalize() Возвращает форму нормализации в стандарте кодирования символов Unicode (Юникод) для указанной строки.
padEnd() Позволяет дополнить текущую строку, начиная с её конца (справа) с помощью пробельного символа (по умолчанию), или заданной строкой, таким образом чтобы результирующая строка достигла заданной длины.
padStart() Позволяет дополнить текущую строку, начиная с её начала (слева) с помощью пробельного символа (по умолчанию), или заданной строкой, таким образом чтобы результирующая строка достигла заданной длины.
repeat() Возвращает строку из указанного количества повторений. Дробная часть количества отбрасывается; отрицательное число и Infinity вызывают RangeError.
replace() Выполняет внутри строки поиск с использованием регулярного выражения (объект RegExp), или строкового значения и возвращает новую строку, в которой будут заменены найденные значения.
search() Выполняет поиск первого соответствия (сопоставления) регулярному выражению (объект RegExp) внутри строки.
slice() Позволяет возвратить новую строку, которая содержит копии символов, вырезанных из исходной строки.
split() Позволяет разбить строки на массив подстрок, используя заданную строку разделитель для определения места разбиения.
startsWith() Определяет, совпадает ли начало данной строки с указанной строкой, или символом, возвращая при этом логическое значение.
substr() Устарело Устаревший метод Annex B: извлекает заданное количество кодовых единиц UTF-16 от начального индекса.
substring() Позволяет извлечь символы из строки (подстроку) между двумя заданными индексами, или от определенного индекса до конца строки.
toLocaleLowerCase() Преобразует строку в строчные буквы (нижний регистр) с учетом текущего языкового стандарта.
toLocaleUpperCase() Преобразует строку в заглавные буквы (верхний регистр) с учетом текущего языкового стандарта.
toLowerCase() Преобразует строку в строчные буквы (нижний регистр).
toString() Возвращает значение строкового объекта.
toUpperCase() Преобразует строку в заглавные буквы (верхний регистр).
trim() Возвращает строку без пробельных символов и переводов строк в начале и в конце.
valueOf() Возвращает примитивное значение строкового объекта в виде строкового типа данных.
at() Возвращает одну кодовую единицу UTF-16 по индексу. Отрицательный индекс отсчитывается от конца; вне строки возвращает undefined.
matchAll() Возвращает итератор совпадений с группами и индексами. Для RegExp требуется флаг g, иначе TypeError. Исходный lastIndex не изменяется; строковый шаблон преобразуется в RegExp с g.
replaceAll() Возвращает строку с заменой всех совпадений. Строковый шаблон ищется буквально; для RegExp требуется g, иначе TypeError. Поддерживает строку или функцию замены.
trimStart() Возвращает строку без пробельных символов и переводов строк в начале.
trimEnd() Возвращает строку без пробельных символов и переводов строк в конце.
trimLeft() Устарело Альтернативное имя trimStart(); это та же функция.
trimRight() Устарело Альтернативное имя trimEnd(); это та же функция.
isWellFormed() Возвращает boolean: отсутствуют ли в строке одиночные суррогаты UTF-16. Не проверяет нормализацию или число видимых символов.
toWellFormed() Возвращает строку, заменяя одиночные суррогаты UTF-16 символом U+FFFD; корректные пары сохраняются.
[Symbol.iterator]() Возвращает итератор кодовых точек. Используется в for...of и разворачивании строки; составные видимые символы может разделять.

Устаревшие HTML-методы String

Устаревшие HTML-методы String
Метод Описание
anchor() Устарело Возвращает HTML-строку, оборачивая исходный текст в a с атрибутом name. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
link() Устарело Возвращает HTML-строку, оборачивая исходный текст в a с атрибутом href. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
big() Устарело Возвращает HTML-строку, оборачивая исходный текст в big. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
blink() Устарело Возвращает HTML-строку, оборачивая исходный текст в blink. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
bold() Устарело Возвращает HTML-строку, оборачивая исходный текст в b. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
fixed() Устарело Возвращает HTML-строку, оборачивая исходный текст в tt. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
fontcolor() Устарело Возвращает HTML-строку, оборачивая исходный текст в font с атрибутом color. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
fontsize() Устарело Возвращает HTML-строку, оборачивая исходный текст в font с атрибутом size. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
italics() Устарело Возвращает HTML-строку, оборачивая исходный текст в i. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
small() Устарело Возвращает HTML-строку, оборачивая исходный текст в small. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
strike() Устарело Возвращает HTML-строку, оборачивая исходный текст в strike. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
sub() Устарело Возвращает HTML-строку, оборачивая исходный текст в sub. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.
sup() Устарело Возвращает HTML-строку, оборачивая исходный текст в sup. Не вставляет результат в DOM и не экранирует исходное содержимое. Для нового кода используйте DOM и CSS.

Свойства String

Свойства String
Свойство Описание
string.length Длина строки в кодовых единицах UTF-16, доступная только для чтения. Может отличаться от числа кодовых точек и видимых символов.
String.prototype Общий прототип строковых обёрток; сам содержит пустое строковое значение и length = 0.
String.prototype.constructor Унаследованная ссылка, исходно String; может быть переопределена.
String.length Собственное свойство функции-конструктора: число формальных параметров, равное 1.
String.name Собственное имя функции-конструктора: "String".

Спецификация

ECMAScript: String

Примеры, попробуйте сами

Кодовые единицы, точки и нормализация

Измените строку с эмодзи. Сравните length, итерацию, charCodeAt() и codePointAt().

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Кодовые единицы, точки и нормализация</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
const text = 'A😀'
console.log(text.length)
console.log([...text])
console.log(text.charCodeAt(1), text.codePointAt(1))
console.log(String.fromCodePoint(0x1f600))
console.log('é' === 'é')
console.log('é' === 'é'.normalize())
console.log(text.at(-1).charCodeAt(0))

Измените исходную строку и шаблон. matchAll() сохраняет группы, replaceAll() со строкой ищет буквально.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Все совпадения и буквальная замена</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
const text = 'a1 a22'
console.log([...text.matchAll(/a(\d+)/g)].map((match) => [match[0], match[1], match.index]))
console.log('a.b.a'.replaceAll('.', '-'))
console.log('  текст  '.trimStart())
console.log('  текст  '.trimEnd())

Одиночный суррогат и корректная строка

Замените одиночный суррогат эмодзи. Сравните isWellFormed() и исправленный результат toWellFormed().

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Одиночный суррогат и корректная строка</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
const text = '\ud800'
if (typeof text.isWellFormed === 'function') {
    console.log(text.isWellFormed())
    console.log(text.toWellFormed())
} else {
    console.log('Проверка корректности UTF-16 не поддерживается в этом браузере')
}