---
sidebar_position: 3
---

# Строки

В JavaScript любые текстовые данные являются строками.
Внутренний формат для строк — всегда UTF-16, вне зависимости от кодировки страницы.

### Кавычки

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

### Спецсимволы

| Символ        | Описание                                                                                                                                                                                          |
|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| \n            | Перевод строки                                                                                                                                                                                    |
| \r            | В текстовых файлах Windows для перевода строки используется комбинация символов \r\n, а на других ОС это просто \n. Это так по историческим причинам, ПО под Windows обычно понимает и просто \n. |
| \\', \\", \\` | Кавычки                                                                                                                                                                                           |
| \\\           | Обратный слеш                                                                                                                                                                                     |
| \t            | Знак табуляции                                                                                                                                                                                    |
| \b, \f, \v    | Backspace, Form Feed и Vertical Tab — оставлены для обратной совместимости, сейчас не используются.                                                                                               |

### Длина строки
💥 **length** — это числовое свойство, а не функция, добавлять скобки не нужно.

### Доступ к символам
```js
let str = `Hello`;

// получаем первый символ
alert( str[0] ); // H
alert( str.at(0) ); // H

// получаем последний символ
alert( str[str.length - 1] ); // o
alert( str.at(-1) ); // o
```
Также можно перебрать строку посимвольно, используя for..of:

### Строки неизменяемы
Можно создать новую строку и записать её в ту же самую переменную вместо старой.

### Поиск подстроки
**str.indexOf** - Он ищет подстроку substr в строке str, начиная с позиции pos, и возвращает позицию, на которой располагается совпадение, либо -1 при отсутствии совпадений.
```js
let str = 'Widget with id';

alert( str.indexOf('Widget') ); // 0, потому что подстрока 'Widget' найдена в начале
alert( str.indexOf('widget') ); // -1, совпадений нет, поиск чувствителен к регистру

alert( str.indexOf("id") ); // 1, подстрока "id" найдена на позиции 1 (..idget with id)
```
💥 str.lastIndexOf(substr, position) - ищет с конца строки к её началу

**includes** - если нам необходимо проверить, есть ли совпадение, но позиция не нужна.
```js
alert( "Widget with id".includes("Widget") ); // true
alert( "Hello".includes("Bye") ); // false
```
**startsWith, endsWith** - начинается ли, заканчивается ли строка определённой строкой
```js
alert( "Widget".startsWith("Wid") ); // true, "Wid" — начало "Widget"
alert( "Widget".endsWith("get") ); // true, "get" — окончание "Widget"
```

### Получение подстроки
В JavaScript есть 3 метода для получения подстроки: **substring**, **substr** и **slice**
Из двух других вариантов, slice более гибок, он поддерживает отрицательные аргументы, и его короче писать. Так что, в принципе, можно запомнить только его.
```js
str.slice(start [, end]) // возвращает часть строки от start до (не включая) end.
str.substring(start [, end]) // возвращает часть строки между start и end (не включая) end.
str.substr(start [, length]) // - возвращает часть строки от start длины length.
```

### Сравнение строк
строки сравниваются посимвольно в алфавитном порядке.
1. Строчные буквы больше заглавных **'a' > 'Z'**
2. Буквы, имеющие диакритические знаки, идут «не по порядку» **'Österreich' > 'Zealand'**

#### Правильное сравнение
«Правильный» алгоритм сравнения строк сложнее, чем может показаться, так как разные языки используют разные алфавиты.
К счастью, все современные браузеры (для IE10− нужна дополнительная библиотека Intl.JS) поддерживают стандарт ECMA 402, обеспечивающий правильное сравнение строк на разных языках с учётом их правил.

Для этого есть соответствующий метод.

Вызов str.localeCompare(str2) возвращает число, которое показывает, какая строка больше в соответствии с правилами языка:
- Отрицательное число, если str меньше str2.
- Положительное число, если str больше str2.
- 0, если строки равны.

🚀 **Источник: [https://learn.javascript.ru/string](https://learn.javascript.ru/string)**