JavaScript строки
Строка в JavaScript — это значение для хранения текста: например, имени пользователя, сообщения или адреса.
Встроенный String позволяет преобразовывать значения в строки, а строковые методы — искать,
извлекать и заменять фрагменты текста.
Строки и UTF-16
Строки неизменяемы. Индексы и length измеряются в кодовых единицах UTF-16: "😀".length равно
2. Итерация for...of учитывает кодовые точки, но не объединяет составные видимые символы.
String(value) возвращает примитив, new String(value) — объект-обёртку.
String() даёт пустую строку. Индексные свойства строковой обёртки доступны только для чтения.
Ниже отдельно перечислены собственные статические методы String и методы его прототипа. Общие унаследованные возможности других объектов в таблицы не включены.
Статические методы String
| Метод | Описание |
|---|---|
fromCharCode()
|
Создаёт строку из кодовых единиц UTF-16. Аргументы преобразуются в беззнаковые 16-битные целые. |
fromCodePoint() |
Преобразует значение или значения кодовых точек в стандарте кодирования символов Юникод в символы и возвращает строковое значение. Позволяет работать со значениями выше 65535. |
raw()
|
Возвращает необработанную строковую форму строки шаблона. |
Методы экземпляра 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
| Метод | Описание |
|---|---|
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.length |
Длина строки в кодовых единицах UTF-16, доступная только для чтения. Может отличаться от числа кодовых точек и видимых символов. |
String.prototype |
Общий прототип строковых обёрток; сам содержит пустое строковое значение и length = 0. |
String.prototype.constructor |
Унаследованная ссылка, исходно String; может быть переопределена. |
String.length |
Собственное свойство функции-конструктора: число формальных параметров, равное 1. |
String.name |
Собственное имя функции-конструктора: "String". |
Спецификация
Примеры, попробуйте сами
Кодовые единицы, точки и нормализация
Измените строку с эмодзи. Сравните length, итерацию, charCodeAt() и codePointAt().
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Кодовые единицы, точки и нормализация</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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 lang="ru">
<head>
<meta charset="UTF-8" />
<title>Все совпадения и буквальная замена</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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 lang="ru">
<head>
<meta charset="UTF-8" />
<title>Одиночный суррогат и корректная строка</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
const text = '\ud800'
if (typeof text.isWellFormed === 'function') {
console.log(text.isWellFormed())
console.log(text.toWellFormed())
} else {
console.log('Проверка корректности UTF-16 не поддерживается в этом браузере')
}