0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Какие из этих пяти вариантов - строки?</p>
1
<p>Какие из этих пяти вариантов - строки?</p>
2
<h2>Кавычки</h2>
2
<h2>Кавычки</h2>
3
<p>Какие из этих пяти вариантов - строки? С первыми двумя все понятно: это точно строки, мы уже работали с подобными конструкциями. А что насчет остальных?</p>
3
<p>Какие из этих пяти вариантов - строки? С первыми двумя все понятно: это точно строки, мы уже работали с подобными конструкциями. А что насчет остальных?</p>
4
<p>Любой одиночный символ в кавычках - это строка. Пустая строка '' - это тоже строка. То есть строкой мы считаем все, что находится внутри кавычек, даже если это пробел, один символ или вообще отсутствие символов.</p>
4
<p>Любой одиночный символ в кавычках - это строка. Пустая строка '' - это тоже строка. То есть строкой мы считаем все, что находится внутри кавычек, даже если это пробел, один символ или вообще отсутствие символов.</p>
5
<p>Ранее в уроках мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:</p>
5
<p>Ранее в уроках мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:</p>
6
<p>Представьте, что вы хотите напечатать строчку<em>Dragon's mother</em>. Апостроф перед буквой<strong>s</strong>- это такой же символ, как одинарная кавычка. Попробуем:</p>
6
<p>Представьте, что вы хотите напечатать строчку<em>Dragon's mother</em>. Апостроф перед буквой<strong>s</strong>- это такой же символ, как одинарная кавычка. Попробуем:</p>
7
<p>Такая программа не будет работать. С точки зрения JavaScript, строка началась с одинарной кавычки, а потом закончилась после буквы<strong>n</strong>. Дальше были символы s mother без кавычек - значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: '). Этот код синтаксически некорректен (это видно даже по тому, как подсвечен код).</p>
7
<p>Такая программа не будет работать. С точки зрения JavaScript, строка началась с одинарной кавычки, а потом закончилась после буквы<strong>n</strong>. Дальше были символы s mother без кавычек - значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: '). Этот код синтаксически некорректен (это видно даже по тому, как подсвечен код).</p>
8
<p>Здесь нам помогут двойные кавычки. Такой вариант программы отработает корректно:</p>
8
<p>Здесь нам помогут двойные кавычки. Такой вариант программы отработает корректно:</p>
9
<p>Теперь интерпретатор знает, что строка началась с двойной кавычки - значит, и закончиться должна на двойной кавычке. А одинарная кавычка внутри стала частью строки.</p>
9
<p>Теперь интерпретатор знает, что строка началась с двойной кавычки - значит, и закончиться должна на двойной кавычке. А одинарная кавычка внутри стала частью строки.</p>
10
<p>Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки не важно.</p>
10
<p>Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки не важно.</p>
11
<p>А что, если мы хотим создать такую строку:</p>
11
<p>А что, если мы хотим создать такую строку:</p>
12
<p>В ней есть и одинарные и двойные кавычки. Как быть в этой ситуации? Нужно каким-то образом сказать интерпретатору считать каждую кавычку частью строки, а не началом или концом строки.</p>
12
<p>В ней есть и одинарные и двойные кавычки. Как быть в этой ситуации? Нужно каким-то образом сказать интерпретатору считать каждую кавычку частью строки, а не началом или концом строки.</p>
13
<p>Для этого<strong>экранируют</strong>специальные символы. В нашем случае тот символ, который является признаком конца и начала строки, это либо одинарная кавычка, либо двойная, в зависимости от ситуации. Для экранирования используется обратный слеш \.</p>
13
<p>Для этого<strong>экранируют</strong>специальные символы. В нашем случае тот символ, который является признаком конца и начала строки, это либо одинарная кавычка, либо двойная, в зависимости от ситуации. Для экранирования используется обратный слеш \.</p>
14
<p>Посмотрите внимательно: нам нужно было добавить \ для двойных кавычек, но не для одинарной (апостроф), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками:</p>
14
<p>Посмотрите внимательно: нам нужно было добавить \ для двойных кавычек, но не для одинарной (апостроф), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками:</p>
15
<p>А что, если нужно вывести сам обратный слеш? Точно так же, как и любой другой специальный символ, его надо экранировать самим собой.</p>
15
<p>А что, если нужно вывести сам обратный слеш? Точно так же, как и любой другой специальный символ, его надо экранировать самим собой.</p>
16
<p>Вопрос на самопроверку, что выведет этот код?</p>
16
<p>Вопрос на самопроверку, что выведет этот код?</p>
17
<h2>Экранирующие последовательности</h2>
17
<h2>Экранирующие последовательности</h2>
18
<p>Мы хотим показать диалог Матери Драконов со своим ребенком:</p>
18
<p>Мы хотим показать диалог Матери Драконов со своим ребенком:</p>
19
<p>Если вывести на экран строку с таким текстом:</p>
19
<p>Если вывести на экран строку с таким текстом:</p>
20
<p>то получится так:</p>
20
<p>то получится так:</p>
21
<p>Не то, что мы хотели. Строки расположены друг за другом, а не одна ниже другой. Нам нужно как-то сказать интерпретатору "нажать на энтер" - сделать перевод строки после вопросительного знака. Это можно сделать, используя символ перевода строки: \n.</p>
21
<p>Не то, что мы хотели. Строки расположены друг за другом, а не одна ниже другой. Нам нужно как-то сказать интерпретатору "нажать на энтер" - сделать перевод строки после вопросительного знака. Это можно сделать, используя символ перевода строки: \n.</p>
22
<p>Результат:</p>
22
<p>Результат:</p>
23
<p>\n - это специальный символ. В литературе его часто обозначают как<em>LF</em>(Line Feed). Возможно вы сейчас подумали, что это опечатка, ведь здесь мы видим два символа \ и n, но это не так. С точки зрения компьютера - это один невидимый символ перевода строки. Доказательство:</p>
23
<p>\n - это специальный символ. В литературе его часто обозначают как<em>LF</em>(Line Feed). Возможно вы сейчас подумали, что это опечатка, ведь здесь мы видим два символа \ и n, но это не так. С точки зрения компьютера - это один невидимый символ перевода строки. Доказательство:</p>
24
<p>Почему так сделано? \n - всего лишь способ записать символ перевода строки, но сам перевод строки по своему смыслу - это один символ, правда, невидимый. Именно поэтому и возникла такая задача. Нужно было как-то представить его на клавиатуре. А поскольку количество знаков на клавиатуре ограничено и отдано под самые важные, то все специальные символы реализуются в виде таких обозначений.</p>
24
<p>Почему так сделано? \n - всего лишь способ записать символ перевода строки, но сам перевод строки по своему смыслу - это один символ, правда, невидимый. Именно поэтому и возникла такая задача. Нужно было как-то представить его на клавиатуре. А поскольку количество знаков на клавиатуре ограничено и отдано под самые важные, то все специальные символы реализуются в виде таких обозначений.</p>
25
<p>Символ перевода строки не является чем-то специфичным для программирования. Все, кто хоть раз печатал на компьютере, использовал перевод строки, нажимая на Enter. Во многих редакторах есть опция, позволяющая включить отображение невидимых символов - с ее помощью можно понять, где они находятся (хотя это всего лишь схематичное отображение, у этих символов нет графического представления, они невидимые):</p>
25
<p>Символ перевода строки не является чем-то специфичным для программирования. Все, кто хоть раз печатал на компьютере, использовал перевод строки, нажимая на Enter. Во многих редакторах есть опция, позволяющая включить отображение невидимых символов - с ее помощью можно понять, где они находятся (хотя это всего лишь схематичное отображение, у этих символов нет графического представления, они невидимые):</p>
26
<p>Устройство, которое выводит соответствующий текст, учитывает этот символ. Например, принтер при встрече с LF протаскивает бумагу вверх на одну строку, а текстовый редактор переносит весь последующий текст ниже, также на одну строку.</p>
26
<p>Устройство, которое выводит соответствующий текст, учитывает этот символ. Например, принтер при встрече с LF протаскивает бумагу вверх на одну строку, а текстовый редактор переносит весь последующий текст ниже, также на одну строку.</p>
27
<p>\n - это пример<strong>экранирующей последовательности</strong>(escape sequence). Их еще называют управляющими конструкциями. Хотя таких символов не один десяток, в программировании часто встречаются всего несколько. Кроме перевода строки, к таким символам относятся табуляция (разрыв, получаемый при нажатии на кнопку Tab) и возврат каретки (только в Windows). Нам, программистам, часто нужно использовать перевод строки \n для правильного форматирования текста.</p>
27
<p>\n - это пример<strong>экранирующей последовательности</strong>(escape sequence). Их еще называют управляющими конструкциями. Хотя таких символов не один десяток, в программировании часто встречаются всего несколько. Кроме перевода строки, к таким символам относятся табуляция (разрыв, получаемый при нажатии на кнопку Tab) и возврат каретки (только в Windows). Нам, программистам, часто нужно использовать перевод строки \n для правильного форматирования текста.</p>
28
<p>На экран выведется:</p>
28
<p>На экран выведется:</p>
29
<p>Обратите внимание на следующие моменты:</p>
29
<p>Обратите внимание на следующие моменты:</p>
30
<ol><li><p>Не имеет значения, что стоит перед или после \n: символ или пустая строка. Перевод будет обнаружен и выполнен в любом случае.</p>
30
<ol><li><p>Не имеет значения, что стоит перед или после \n: символ или пустая строка. Перевод будет обнаружен и выполнен в любом случае.</p>
31
</li>
31
</li>
32
<li><p>Помните, что строка может содержать один символ или вообще ноль символов. А еще строка может содержать только \n. Проанализируйте следующий пример:</p>
32
<li><p>Помните, что строка может содержать один символ или вообще ноль символов. А еще строка может содержать только \n. Проанализируйте следующий пример:</p>
33
<p>Здесь мы сначала выводим строку "перевод строки", а потом делаем вывод обыкновенной строки.</p>
33
<p>Здесь мы сначала выводим строку "перевод строки", а потом делаем вывод обыкновенной строки.</p>
34
<p>Почему перед строкой<em>Dunsen</em>появилось две пустые строки, а не одна? Дело в том, что console.log() при выводе значения автоматически добавляет в конец символ перевода строки. Таким образом, один перевод строки мы указали явно, передав этот символ экранирующей последовательности аргументом в функцию, а второй перевод строки добавлен самой функцией автоматически.</p>
34
<p>Почему перед строкой<em>Dunsen</em>появилось две пустые строки, а не одна? Дело в том, что console.log() при выводе значения автоматически добавляет в конец символ перевода строки. Таким образом, один перевод строки мы указали явно, передав этот символ экранирующей последовательности аргументом в функцию, а второй перевод строки добавлен самой функцией автоматически.</p>
35
<p>Еще пример кода:</p>
35
<p>Еще пример кода:</p>
36
<p>Сейчас у вас достаточно знаний, чтобы самостоятельно разобраться и понять, почему вывод сформировался именно таким образом.</p>
36
<p>Сейчас у вас достаточно знаний, чтобы самостоятельно разобраться и понять, почему вывод сформировался именно таким образом.</p>
37
</li>
37
</li>
38
<li><p>Если нам понадобится вывести \n именно как текст (два отдельных печатных символа), то можно воспользоваться уже известным нам способом экранирования, добавив еще один \ в начале. То есть последовательность \\n отобразится как символы \ и n, идущие друг за другом.</p>
38
<li><p>Если нам понадобится вывести \n именно как текст (два отдельных печатных символа), то можно воспользоваться уже известным нам способом экранирования, добавив еще один \ в начале. То есть последовательность \\n отобразится как символы \ и n, идущие друг за другом.</p>
39
</li>
39
</li>
40
</ol><p>Небольшое, но важное замечание про Windows. В Windows для перевода строк по умолчанию используется \r\n. Такая комбинация хорошо работает только в Windows, но создает проблемы при переносе в другие системы (например, когда в команде разработчиков есть пользователи как Windows, так и Linux). Дело в том, что последовательность \r\n имеет разную трактовку в зависимости от выбранной кодировки (рассматривается позже). По этой причине, в среде разработчиков принято всегда использовать \n без \r, так как LF всегда трактуется одинаково и отлично работает в любой системе. Не забудьте настроить ваш редактор на использование \n.</p>
40
</ol><p>Небольшое, но важное замечание про Windows. В Windows для перевода строк по умолчанию используется \r\n. Такая комбинация хорошо работает только в Windows, но создает проблемы при переносе в другие системы (например, когда в команде разработчиков есть пользователи как Windows, так и Linux). Дело в том, что последовательность \r\n имеет разную трактовку в зависимости от выбранной кодировки (рассматривается позже). По этой причине, в среде разработчиков принято всегда использовать \n без \r, так как LF всегда трактуется одинаково и отлично работает в любой системе. Не забудьте настроить ваш редактор на использование \n.</p>
41
<h2>Конкатенация</h2>
41
<h2>Конкатенация</h2>
42
<p>В веб-разработке программы постоянно оперируют строками. Все, что мы видим на сайтах, так или иначе представлено в виде текста. Этот текст чаще всего динамический, то есть полученный из разных частей, которые соединяются вместе. Операция соединения строк в программировании называется<strong>конкатенацией</strong>.</p>
42
<p>В веб-разработке программы постоянно оперируют строками. Все, что мы видим на сайтах, так или иначе представлено в виде текста. Этот текст чаще всего динамический, то есть полученный из разных частей, которые соединяются вместе. Операция соединения строк в программировании называется<strong>конкатенацией</strong>.</p>
43
<p>Склеивание строк всегда происходит в том же порядке, в котором записаны операнды. Левый операнд становится левой частью строки, а правый - правой.</p>
43
<p>Склеивание строк всегда происходит в том же порядке, в котором записаны операнды. Левый операнд становится левой частью строки, а правый - правой.</p>
44
<p>Вот еще несколько примеров:</p>
44
<p>Вот еще несколько примеров:</p>
45
<p>Как видите, строки можно склеивать, даже если они записаны с разными кавычками.</p>
45
<p>Как видите, строки можно склеивать, даже если они записаны с разными кавычками.</p>
46
<p>В последнем примере название города получилось с ошибкой:<em>King's Landing</em>нужно писать через пробел. Но в наших начальных строках не было пробелов, а пробелы в самом коде слева и справа от символа + не имеют значения, потому что они не являются частью строк.</p>
46
<p>В последнем примере название города получилось с ошибкой:<em>King's Landing</em>нужно писать через пробел. Но в наших начальных строках не было пробелов, а пробелы в самом коде слева и справа от символа + не имеют значения, потому что они не являются частью строк.</p>
47
<p>Выхода из этой ситуации два:</p>
47
<p>Выхода из этой ситуации два:</p>
48
<p>Пробел - такой же символ, как и другие. Чем больше пробелов, тем шире отступы:</p>
48
<p>Пробел - такой же символ, как и другие. Чем больше пробелов, тем шире отступы:</p>
49
49