Строка (объект String)

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

Строкой в JavaScript является ноль или больше символов, заключенных в кавычки.


var x = "Иван Петров";

Можно использовать как одинарные, так и двойные кавычки:


var carname = "Volvo XC60";  // Двойные кавычки
var carname = 'Volvo XC60';  // Одинарные кавычки

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


var answer = "Его звали 'Иван'";
var answer = 'Его звали "Иван"';

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

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


var x = "Мы, так называемые, "викинги" с севера.";

Эта строка будет обрезана до "Мы, так называемые, ".

Для решения этой проблемы нужно воспользоваться экранирующим символом.

Экранирующий символ (\) преобразует специальные символы в символы строки:

Код Результат Описание
\' ' Одинарная кавычка
\" " Двойная кавычка
\\ \ Обратный слэш

Так, последовательность \" вставляет в строку символ двойной кавычки:


var x = "Мы, так называемые, \"викинги\" с севера.";

Кроме этого в JavaScript существует еще шесть экранированных последовательностей:

Код Результат
\b Возврат на шаг (Backspace)
\f Подача страницы
\n Новая строка
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция

Все эти 6 экранированных символов изначально были введены для управления телетайпных, печатных и факс устройств. В HTML эти символы не имеют смысла.

Перенос длинных строк

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

Если строковое выражение JavaScript не помещается на одной строке, то его можно перенести на новую строку. Делать перенос лучше всего после оператора:


document.getElementById("demo").innerHTML =
"Hello Dolly!"; 

Также, можно разбить строку при помощи символа обратного слеша (\):


document.getElementById("demo").innerHTML = "Hello \
Dolly!"; 

Однако это не лучший способ, так как у него нет универсальной поддержки. Некоторые браузеры не допускают использование пробелов после символа \.

Наиболее безопасным способом переноса строк является оператор строкового сложения:


document.getElementById("demo").innerHTML = "Hello " + 
"Dolly!"; 

Нельзя использовать символ обратного слеша (\) для переноса на новую строку кода:


document.getElementById("demo").innerHTML = \ 
"Hello Dolly!"; 

Строки могут быть объектами

Обычно, строки JavaScript это примитивные значения, созданные при помощи литералов.

Однако, при помощи ключевого слова new строки также можно определить и как объекты.

Пример:


var x = "John";
var y = new String("John");

// typeof x вернет тип string
// typeof y вернет тип object 

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

При использовании оператора сравнения ==, одинаковые строки равны:


var x = "John";             
var y = new String("John");

// (x == y) будет истинным (true), потому что x и y имеют равные значения 

Однако, при использовании оператора сравнения ===, одинаковые строки не будут равными, потому что оператор === ожидает совпадения как по значению, так и по типу.


var x = "John";             
var y = new String("John");

// (x === y) будет ложным (false), потому что x и y не равны по типу (string и object) 

Или еще хуже. Объекты не сравниваются:


var x = new String("John");             
var y = new String("John");

// (x == y) - false, потому что x и y разные объекты
// (x === y) - false, потому что x и y разные объекты

Обратите внимание на разницу между (x==y) и (x===y).

При сравнении двух объектов JavaScript всегда возвращается ложь (false).