Работа с текстом — строки в JavaScript
Теперь мы обратим внимание на строки — в программировании так называют части текста. В этой статье мы рассмотрим все распространённые вещи, которые вы должны действительно знать о строках при изучении JavaScript, например, создание строк, экранирование кавычек в строках и объединение строк вместе.
Необходимые навыки: | Базовая компьютерная грамотность, базовое понимание HTML и CSS, понимание что такое JavaScript. |
---|---|
Цель: | Знакомство с основами строк в JavaScript. |
Сила слов
Слова очень важны для людей — это основа нашего общения. Интернет представляет собой преимущественно текстовую среду, предназначенную для того что бы люди общались и делились информацией, поэтому нам полезно иметь контроль над словами, которые появляются в нем. HTML предоставляет визуальную и смысловую структуру для нашего текста, CSS позволяет нам стилизовать его, а JavaScript содержит ряд функций для управления строками, создания пользовательских приветственных сообщений, при необходимости отображая нужные текстовые метки, сортируя элементы в желаемом порядке и многое другое.
Практически во всех программах, которые мы показали вам на данный момент, были задействованы некоторые манипуляции со строками.
Строки — основы
С первого взгляда строки обрабатываются аналогично числам, но если копнуть глубже, вы увидите некоторые заметные отличия. Давайте начнём с ввода некоторых основных строк в консоль разработчика, чтобы познакомиться с ними.
Создание строки
-
Для начала введите следующие строки:
jsconst string = "Революция не будет транслироваться по телевидению."; string;
-
Как и в случае с числами, мы объявляем переменную, инициализируя её строковым значением, а затем возвращаем значение. Единственное различие здесь в том, что при написании строки вам нужно окружить значение кавычками.
-
Если вы не сделаете этого или пропустите одну из кавычек, вы получите сообщение об ошибке. Попробуйте ввести следующие строки:
jsconst badString = Тест; const badString = 'Тест; const badString = Тест';
Эти строки не работают, потому что любая текстовая строка без кавычек считается именем переменной, именем свойства, зарезервированным словом или чем-то подобным. Если браузер не может найти его, возникает ошибка (например, «missing, before statement»). Если браузер может видеть, где начинается строка, но не может найти конец строки, как указано во 2-й строке, она жалуется на ошибку (с «unterminated string literal»). Если ваша программа выявляет такие ошибки, вернитесь назад и проверьте все свои строки, чтобы убедиться, что у вас нет пропущенных кавычек.
-
Следующий код будет выполнен только в том случае, если ранее была объявлена переменная
string
— убедитесь сами:jsconst badString = string; badString;
В настоящее время строка
badString
имеет то же значение, что и строкаstring
.
Одиночные кавычки vs. Двойные кавычки
-
В JavaScript вы можете выбрать одинарные кавычки или двойные кавычки, чтобы обернуть ваши строки. Оба варианта будут работать нормально:
jsconst sgl = "Одиночные кавычки."; const dbl = "Двойные кавычки."; sgl; dbl;
-
Существует очень мало различий между одиночными и двойными кавычками, и решение какие из них использовать в коде остаётся на ваше усмотрение. Однако вы должны выбрать один вариант и придерживаться его, иначе ваш код может выдать ошибку, особенно если вы используете разные кавычки в одной строке! Ниже приведён пример:
jsconst badQuotes = 'Что происходит?";
-
Браузер будет считать, что строка не была закрыта, потому что в строке может появиться другой тип цитаты, который вы не используете, чтобы хранить ваши строки в переменных. Из примера можно понять, о чем идёт речь (в коде ошибок нет):
jsconst sglDbl = 'Я не сказала "да", милорд…'; const dblSgl = "Вы не сказали 'нет'… (королева, Бэкингем)"; sglDbl; dblSgl;
-
Однако вы не можете включить один и тот же знак кавычки внутри строки, если он используется для их хранения. Ниже приведена ошибка, браузер ошибочно определяет место, где строка кончается:
jsconst bigmouth = 'Жанна Д'Арк — народная героиня Франции.';
Что приводит нас к следующей теме.
Экранирование кавычек в строках
Чтобы исправить нашу предыдущую строку кода, нам нужно дать понять браузеру, что кавычка в середине строки не является меткой её конца. Экранирование символов означает, что мы делаем что-то с ними, чтобы убедиться, что они распознаются как текст, а не часть кода. В JavaScript мы делаем это, помещая обратную косую черту непосредственно перед символом. Введите эти строки:
const bigmouth = "Жанна Д'Арк — народная героиня Франции.";
bigmouth;
Так лучше. Таким же образом можно экранировать и другие символы, например "\
. Кроме того существуют специальные коды. Для дополнительной информации см. Escape notation.
Конкатенация строк
-
Конкатенация — это новомодное программистское слово, которое означает «объединить». Объединение строк в JavaScript использует оператор плюс (+), тот же, который мы используем для сложения чисел, но в этом контексте он делает кое-что другое. Попробуем пример в нашей консоли.
jsconst one = "Привет, "; const two = "как дела?"; const joined = one + two; joined;
Результат этой программы - это переменная
joined
, содержащая значение "Привет, как дела?". -
В последнем случае мы просто объединим две строки вместе, но на самом деле, вы можете объединить столько строк, сколько хотите, до тех пор, пока вы ставите
+
между ними. Попробуйте это:jsconst multiple = one + one + one + one + two; multiple;
-
Вы также можете использовать сочетание переменных и фактических строк. Попробуйте это:
jsconst response = one + "Я в порядке — " + two; response;
Примечание: Когда вы вводите фактическую строку в свой код, заключённую в одинарные или двойные кавычки, она называется строковым литералом.
Конкатенация строк в контексте
Давайте посмотрим на конкатенацию строк в действии — вот пример из предыдущего курса:
<button>Press me</button>
const button = document.querySelector("button");
button.onclick = function () {
const name = prompt("Как тебя зовут?");
alert("Привет, " + name + ", рад тебя видеть!");
};
Здесь мы используем функцию Window.prompt ()
в строке 4, которая просит пользователя ответить на вопрос через всплывающее диалоговое окно, а затем сохраняет введённый текст внутри заданной переменной — в этом случае name
. Затем мы используем функцию Window.alert ()
в строке 5 для отображения другого всплывающего окна, содержащего строку, которую мы собрали из двух строковых литералов и переменной name
.
Числа vs. строки
-
Итак, что происходит, когда мы пытаемся добавить (или конкатенировать) строку и число? Попробуем это в нашей консоли:
js"Front " + 242;
Вы можете ожидать, что это вызовет ошибку, но все работает отлично. Попытка представить строку как число на самом деле не имеет смысла, но число как строку — имеет, поэтому браузер довольно умно преобразует число в строку и объединяет две строки вместе.
-
Вы даже можете сделать это с двумя числами, вы можете заставить число стать строкой, обернув её в кавычки. Попробуйте следующее (мы используем оператор
typeof
для того, чтобы установить является ли переменная числом или строкой):jsconst myDate = "19" + "67"; typeof myDate;
-
Если у вас есть числовая переменная, которую вы хотите преобразовать в строчную без внесения каких-либо иных изменений или строковую переменную, которую вы хотите преобразовать в число, вы можете использовать следующие две конструкции:
-
Объект
Number
преобразует всё переданное в него в число, если это возможно. Попробуйте следующее:jsconst myString = "123"; const myNum = Number(myString); typeof myNum;
-
С другой стороны, каждое число имеет метод, называемый
toString()
, который преобразует его в эквивалентную строку. Попробуй это:jsconst myNum = 123; const myString = myNum.toString(); console.log(typeof myString);
-
Эти конструкции могут быть действительно полезны в некоторых ситуациях. Например, если пользователь вводит число в текстовое поле формы, данные будут распознаны как строка. Однако, если вы хотите добавить это число к чему-то, вам понадобится его значение, поэтому вы можете передать его через Number()
, чтобы справиться с этим. Именно это мы сделали в нашей Number Guessing Game, в строке 59.
Совмещение строк с различными выражениями
Вы можете совмещать выражения JavaScript в литералы шаблона, а также простые переменные, и результаты будут включены в конечную строку:
const song = "Fight the Youth";
const score = 9;
const highestScore = 10;
const output = `Мне нравится песня ${song}. Я оценил её на ${
(score / highestScore) * 100
}%.`;
console.log(output); // "Мне нравится песня Fight the Youth. Я оценил её на 90%."
Многострочный текст
Литералы шаблона учитывают разрывы строк в исходном коде, поэтому вы можете писать текст в несколько строчек, например:
const output = `Мне нравится эта песня.
Я оценил её на 90%.`;
console.log(output);
/*
Мне нравится эта песня.
Я оценил её на 90%.
*/
Чтобы получить эквивалентный вывод с использованием обычной строки, вам придется включить в строку символы переноса строки (\n
):
const output = "Мне нравится эта песня.\nЯ оценил её на 90%.";
console.log(output);
/*
Мне нравится эта песня.
Я оценил её на 90%.
*/
Смотри нашу справочную страницу литералов шаблонов для получения дополнительных примеров и подробной информации о расширенных функциях.