> For the complete documentation index, see [llms.txt](https://andersenlab.gitbook.io/javascript/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://andersenlab.gitbook.io/javascript/js-basics/strings/basics.md).

# Basics

## Строковые литералы

Строковый литерал – это последовательность из нуля или более Unicode символов, заключенная в одинарные или двойные кавычки (' или "). Сами символы двойных кавычек могут содержаться в строках, ограниченных символами одинарных кавычек, а символы одинарных кавычек – в строках, ограниченных символами двойных кавычек. Строковые литералы должны записываться в одной строке программы и не могут разбиваться на две строки. Чтобы включить в строковый литерал символ перевода строки, следует использовать последовательность символов \n, описание которой приведено в следующем разделе. Примеры строковых литералов:

```javascript
"" // Это пустая строка: в ней ноль символов
'testing'
"3.14"
'name="myform"'
"Вы предпочитаете книги издательства O'Reilly, не правда ли?"
"В этом строковом литерале\nдве строки"
"π - это отношение длины окружности круга к его диаметру"
```

Ограничивая строку одинарными кавычками, необходимо проявлять осторожность в обращении с апострофами, употребляемыми в английском языке для обозначения притяжательного падежа, и в сокращениях, как, например, в словах «can't» и «O'Reilly's». Поскольку апостроф и одиночная кавычка – это одно и то же, необходимо при помощи символа обратного слэша (\\) экранировать апострофы, расположенные внутри одиночных кавычек.

Программы на клиентском JavaScript часто содержат строки HTML-кода, а HTML-код, в свою очередь, часто содержит строки JavaScript-кода. Как и в JavaScript, для ограничения строк в HTML применяются либо одинарные, либо двойные кавычки. Поэтому, при объединении JavaScript и HTML-кода, есть смысл придерживаться одного «стиля» кавычек для JavaScript, а другого – для HTML. В следующем примере строка «Спасибо» в JavaScript-выражении заключена в одинарные кавычки, а само выражение, в свою очередь, заключено в двойные кавычки как значение HTML-атрибута обработчика событий:

```javascript
<a href="" onclick="alert('Спасибо')">Щелкни на мне</a>
```

## Управляющие последовательности в строковых литералах

Символ обратного слэша (\\) имеет специальное назначение в JavaScript-строках. Вместе с символами, следующими за ним, он обозначает символ, не представимый внутри строки другими способами. Например, \n – это управляющая последовательность (escape sequence), обозначающая символ перевода строки.

Другой пример – это последовательность \\', обозначающая символ одинарной кавычки. Эта управляющая последовательность необходима для включения символа одинарной кавычки в строковый литерал, заключенный в одинарные кавычки. Теперь становится понятно, почему мы называем эти последовательности управляющими: здесь символ обратного слэша позволяет управлять интерпретацией символа одинарной кавычки. Вместо того, чтобы отмечать ею конец строки, мы используем ее как апостроф:

```javascript
'You\'re right, it can\'t be a quote'
```

| Константа | Значение                          |
| --------- | --------------------------------- |
| \0        | Символ NUL (\u0000)               |
| \b        | «Забой» (\u0008)                  |
| \t        | Горизонтальная табуляция (\u0009) |
| \n        | Перевод строки (\u000A)           |
| \v        | Вертикальная табуляция (\u000B)   |
| \f        | Перевод страницы (\u000C)         |
| \r        | Возврат каретки (\u000D)          |
| \\"       | Двойная кавычка (\u0022)          |
| \\'       | Одинарная кавычка (\u0027)        |
| \\        | Обратный слэш (\u005C)            |

## Операции со строками

Одной из встроенных возможностей JavaScript является способность конкатенировать строки. Если оператор `+` применяется к числам, они складываются, а если к строкам - они объединяются, при этом вторая строка добавляется в конец первой. Например:

```javascript
msg = "Hello, " + "world"; // Получается строка "Hello, world"
greeting = "Добро пожаловать на мою домашнюю страницу," + " " + name;
```

Для определения длины строки – количества содержащихся в ней символов – используется свойство length. Так, если переменная s содержит строку, то длину последней можно получить следующим образом:

```javascript
s.length
```

Для работы со строками существует несколько методов. Так, можно получить последний символ в строке s:

```javascript
last_char = s.charAt(s.length – 1)
```

Чтобы извлечь второй, третий и четвертый символы из строки s, применяется инструкция:

```javascript
sub = s.substring(1,4);
```

Определить позицию первого символа «a» в строке s можно следующим образом:

```javascript
i = s.indexOf('a');
```

Есть еще и ряд методов, которые можно использовать при работе со строками. Полностью эти методы документированы в описании объекта String. Из предыдущих примеров можно понять, что JavaScript-строки (и, как мы увидим позднее, массивы JavaScript) индексируются, начиная с 0. Другими словами, порядковый номер первого символа строки равен нулю. В некоторых реализациях JavaScript отдельные символы могут извлекаться из строк (но не записываться в строки) при обращении к строкам как к массивам, в результате приведенный ранее вызов метода charAt() может быть записан следующим образом:

```javascript
last_char = s[s.length – 1];
```

## Преобразование строк в числа

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

```javascript
var product = "21" * "2"; // в результате получится число 42.
```

Это обстоятельство можно взять на вооружение при необходимости преобразовать строку в число; для этого достаточно просто вычесть из строки значение 0:

```javascript
var number = string_value  0;
```

Менее сложный и более прямолинейный способ преобразования строки в число заключается в обращении к конструктору Number() как к обычной функции:

```javascript
var number = Number(string_value);
```

Недостаток данного способа преобразования строки в число заключается в его чрезмерной строгости. Этот способ может использоваться только для преобразования десятичных чисел, и, хотя он допускает наличие ведущих и оконечных символов пробела, появление других нецифровых символов после числа в строке недопустимо.

Более гибкий способ преобразования обеспечивается функциями parseInt() и parseFloat(). Эти функции преобразуют и возвращают произвольные числа, стоящие в начале строки, игнорируя любые нецифровые символы, расположенные вслед за числом. Функция parseInt() выполняет только целочисленное преобразование, тогда как parseFloat() может преобразовывать как целые, так и вещественные числа. Если строка начинается с символов «0x» или «0X», функция parseInt() интерпретирует строку как шестнадцатеричное число.1 Например:

```javascript
parseInt("3 слепых мышки"); // Вернет 3
parseFloat("3.14 метров"); // Вернет 3.14
parseInt("12.34"); // Вернет 12
parseInt("0xFF"); // Вернет 255
```

В качестве второго аргумента функция parseInt() может принимать основание системы счисления. Корректными значениями являются числа в диапазоне от 2 до 36, например:

```javascript
parseInt("11", 2); // Вернет 3 (1*2 + 1)
parseInt("ff", 16); // Вернет 255 (15*16 + 15)
parseInt("zz", 36); // Вернет 1295 (35*36 + 35)
parseInt("077", 8); // Вернет 63 (7*8 + 7)
parseInt("077", 10); // Вернет 77 (7*10 + 7)
```

Если методы parseInt() и parseFloat() оказываются не в состоянии выполнить преобразование, они возвращают значение NaN:

```javascript
parseInt("eleven"); // Вернет NaN
parseFloat("$72.47"); // Вернет NaN
```
