HTML Diff
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