HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <h2>Транскрипт урока</h2>
1 <h2>Транскрипт урока</h2>
2 <p>Помните свою первую программу "hello, world"?</p>
2 <p>Помните свою первую программу "hello, world"?</p>
3 <p>Сейчас вы уже знаете, что здесь происходит вызов функции, а функция console.log принимает аргумент. В данном случае аргумент - не число, а "строка". Так мы называем фрагменты текста в программировании, потому что они как последовательность букв на веревке.</p>
3 <p>Сейчас вы уже знаете, что здесь происходит вызов функции, а функция console.log принимает аргумент. В данном случае аргумент - не число, а "строка". Так мы называем фрагменты текста в программировании, потому что они как последовательность букв на веревке.</p>
4 <p>Строки есть везде. Сейчас я читаю сценарий, и текстовый файл - это длинная строка. Веб-сайт, на котором вы смотрите эти видео, содержит множество слов - всё это строки. Работа Google запоминать строки - в этом суть поиска. Файлы и папки в вашем компьютере идентифицируются через их названия, которые так же являются всего лишь строками.</p>
4 <p>Строки есть везде. Сейчас я читаю сценарий, и текстовый файл - это длинная строка. Веб-сайт, на котором вы смотрите эти видео, содержит множество слов - всё это строки. Работа Google запоминать строки - в этом суть поиска. Файлы и папки в вашем компьютере идентифицируются через их названия, которые так же являются всего лишь строками.</p>
5 <p>Так же, как мы это делали с числами, мы можем создать константу из строки:</p>
5 <p>Так же, как мы это делали с числами, мы можем создать константу из строки:</p>
6 <p>Вы можете использовать одиночные кавычки или двойные, не так важно, главное чтобы они были одинаковые и в начале и в конце строки.</p>
6 <p>Вы можете использовать одиночные кавычки или двойные, не так важно, главное чтобы они были одинаковые и в начале и в конце строки.</p>
7 <p>Если вам необходимо использовать реальные кавычки внутри строки, тогда используйте другой знак для её создания. Например:</p>
7 <p>Если вам необходимо использовать реальные кавычки внутри строки, тогда используйте другой знак для её создания. Например:</p>
8 <p>Здесь одиночные кавычки используются для формулирования или ограничения строки, и тогда у нас есть возможность поставить двойные внутри. Или наоборот:</p>
8 <p>Здесь одиночные кавычки используются для формулирования или ограничения строки, и тогда у нас есть возможность поставить двойные внутри. Или наоборот:</p>
9 <p>Двойные снаружи - одиночные внутри.</p>
9 <p>Двойные снаружи - одиночные внутри.</p>
10 <p>Но что делать, если такое невозможно, и вам нужно использовать одинаковый тип кавычек и для формулировки строки и внутри неё. Если вы попробуете сделать так</p>
10 <p>Но что делать, если такое невозможно, и вам нужно использовать одинаковый тип кавычек и для формулировки строки и внутри неё. Если вы попробуете сделать так</p>
11 <p>то получите ошибку, потому что ваша строка поломана. Программа сломается в этом месте, потому что тут присутствует вторая закрывающая кавычка такого же типа, а затем идёт странное слово, которое ничего не означает, а потом новая строка. Это неправильный JavaScript.</p>
11 <p>то получите ошибку, потому что ваша строка поломана. Программа сломается в этом месте, потому что тут присутствует вторая закрывающая кавычка такого же типа, а затем идёт странное слово, которое ничего не означает, а потом новая строка. Это неправильный JavaScript.</p>
12 <p>Нам нужно объяснить интерпретатору JavaScript, что некоторые кавычки он должен воспринимать иначе. Они не должны означать "начало строки" или "конец строки", они должны означать "символ кавычек".</p>
12 <p>Нам нужно объяснить интерпретатору JavaScript, что некоторые кавычки он должен воспринимать иначе. Они не должны означать "начало строки" или "конец строки", они должны означать "символ кавычек".</p>
13 <p>Это называется "экранированием". Добавьте символ экранирования, обратный слеш \ перед символом, и символ "изолируется" от своей специфической роли и превратится в обычный знак в строке.</p>
13 <p>Это называется "экранированием". Добавьте символ экранирования, обратный слеш \ перед символом, и символ "изолируется" от своей специфической роли и превратится в обычный знак в строке.</p>
14 <p>Этот символ экранирования может использоваться для включения других специальных символов в строку.</p>
14 <p>Этот символ экранирования может использоваться для включения других специальных символов в строку.</p>
15 <p>Тут есть три момента.</p>
15 <p>Тут есть три момента.</p>
16 <p>Первый: если нам нужен обратный слеш в строке, то он должен быть экранирован другим обратным слешем.</p>
16 <p>Первый: если нам нужен обратный слеш в строке, то он должен быть экранирован другим обратным слешем.</p>
17 <p>Второе: обратный слеш-t это не "экранируемый t-символ": вам не нужно экранировать "t", "t" - это не специальный символ; вся конструкция обратный слеш-t - это специальная<strong>управляющая последовательность</strong>- она представляет собой единичную табуляцию, по сути - длинный пробел.</p>
17 <p>Второе: обратный слеш-t это не "экранируемый t-символ": вам не нужно экранировать "t", "t" - это не специальный символ; вся конструкция обратный слеш-t - это специальная<strong>управляющая последовательность</strong>- она представляет собой единичную табуляцию, по сути - длинный пробел.</p>
18 <p>Третье: обратный слеш-n - это другая управляющая последовательность, которая представляет собой новую строчку. Считай, что вы нажмёте клавишу Enter, когда набираете текст. Поэтому, всё, что следует дальше, перейдет на новую строчку .</p>
18 <p>Третье: обратный слеш-n - это другая управляющая последовательность, которая представляет собой новую строчку. Считай, что вы нажмёте клавишу Enter, когда набираете текст. Поэтому, всё, что следует дальше, перейдет на новую строчку .</p>
19 <p>Теперь давайте попробуем написать функцию. Она будет принимать строку - имя и возвращать другую строку - приветствие. Вот как это должно работать:</p>
19 <p>Теперь давайте попробуем написать функцию. Она будет принимать строку - имя и возвращать другую строку - приветствие. Вот как это должно работать:</p>
20 <p>Эта функция должна уметь каким-то образом принимать входящую строку и склеивать её с другой строкой. Такой процесс называется "конкатенацией" и в JavaScript он реализуется знаком плюс, как при сложении чисел:</p>
20 <p>Эта функция должна уметь каким-то образом принимать входящую строку и склеивать её с другой строкой. Такой процесс называется "конкатенацией" и в JavaScript он реализуется знаком плюс, как при сложении чисел:</p>
21 <p>Теперь другой пример. Эта функция принимает строку и возвращает ту же строку, но без каждой второй буквы. Например, "California" становится "Clfri".</p>
21 <p>Теперь другой пример. Эта функция принимает строку и возвращает ту же строку, но без каждой второй буквы. Например, "California" становится "Clfri".</p>
22 <p>Такие квадратные скобки позволяют нам получать индивидуальные символы из строки. Как и во многих процессах в программировании, вы начинаете отсчёт с 0, а не от 1. Поэтому первый символ str это str[0], второй - str[1], и так далее. Это число называется "индексом".</p>
22 <p>Такие квадратные скобки позволяют нам получать индивидуальные символы из строки. Как и во многих процессах в программировании, вы начинаете отсчёт с 0, а не от 1. Поэтому первый символ str это str[0], второй - str[1], и так далее. Это число называется "индексом".</p>
23 <p>Функция skip принимает аргумент, создаёт две переменных - i для счётчика и result для итоговой строки. Счётчик - это 0, потому что нам нужно начать с первого символа, а result это пустая строка - мы будем добавлять символы к ней один за другим.</p>
23 <p>Функция skip принимает аргумент, создаёт две переменных - i для счётчика и result для итоговой строки. Счётчик - это 0, потому что нам нужно начать с первого символа, а result это пустая строка - мы будем добавлять символы к ней один за другим.</p>
24 <p>Затем следует цикл while, с условием , что "i меньше, чем длина строки". Длина означает "сколько символов". Длина строки "cats" - 4 - в ней 4 символа, 4 буквы.</p>
24 <p>Затем следует цикл while, с условием , что "i меньше, чем длина строки". Длина означает "сколько символов". Длина строки "cats" - 4 - в ней 4 символа, 4 буквы.</p>
25 <p>Пока счётчик меньше, чем длина, мы склеиваем или конкатенируем результирующую строку с символом по индексу i. Затем добавляем 2 к счётчику. Два, а не один, потому что нам нужно пропустить один символ.</p>
25 <p>Пока счётчик меньше, чем длина, мы склеиваем или конкатенируем результирующую строку с символом по индексу i. Затем добавляем 2 к счётчику. Два, а не один, потому что нам нужно пропустить один символ.</p>
26 <p>В какой-то момент счетчик станет достаточно большим для того, чтобы условие цикла стало ложным, и функция вернёт result.</p>
26 <p>В какой-то момент счетчик станет достаточно большим для того, чтобы условие цикла стало ложным, и функция вернёт result.</p>
27 <p>Давайте попробуем вызвать функцию с аргументом 'cats':</p>
27 <p>Давайте попробуем вызвать функцию с аргументом 'cats':</p>
28 <p>Длина 'cats' - 4. Несмотря на то, что индексы начинаются с 0, длина - это действительное количество. 'c' - не 0 букв, это одна буква. Поэтому длина 'cats' - 4, но индекс его последней буквы - 3.</p>
28 <p>Длина 'cats' - 4. Несмотря на то, что индексы начинаются с 0, длина - это действительное количество. 'c' - не 0 букв, это одна буква. Поэтому длина 'cats' - 4, но индекс его последней буквы - 3.</p>
29 <ol><li>0 меньше четырёх, поэтому войти в цикл while</li>
29 <ol><li>0 меньше четырёх, поэтому войти в цикл while</li>
30 <li>конкатенировать строку с символом по индексу 0 - это 'c'</li>
30 <li>конкатенировать строку с символом по индексу 0 - это 'c'</li>
31 <li>увеличить счётчик на 2</li>
31 <li>увеличить счётчик на 2</li>
32 <li>2 меньше 4, поэтому повторить</li>
32 <li>2 меньше 4, поэтому повторить</li>
33 <li>конкатенировать строку с символом по индексу 2 - это 't'. строка теперь стала 'ct'</li>
33 <li>конкатенировать строку с символом по индексу 2 - это 't'. строка теперь стала 'ct'</li>
34 <li>увеличить счётчик на 2</li>
34 <li>увеличить счётчик на 2</li>
35 <li>4 не меньше 4, поэтому больше не повторять</li>
35 <li>4 не меньше 4, поэтому больше не повторять</li>
36 <li>вернуть результат - 'ct'</li>
36 <li>вернуть результат - 'ct'</li>
37 </ol><p>Вас ждут тест и практическое упражнение.</p>
37 </ol><p>Вас ждут тест и практическое упражнение.</p>
38 <h2>Дополнение к уроку</h2>
38 <h2>Дополнение к уроку</h2>
39 <h3>Неизменяемость</h3>
39 <h3>Неизменяемость</h3>
40 <p>В JavaScript строки являются неизменяемыми, так же говорят "immutable". Это означает, что какие бы вы к ним не применяли функции, они не производят in-place замены (то есть не производят изменения самой строки). Любые строковые функции, примененные к строкам, возвращают<strong>новую</strong>строку. Это верно и в том случае, когда мы обращаемся к конкретному символу в строке.</p>
40 <p>В JavaScript строки являются неизменяемыми, так же говорят "immutable". Это означает, что какие бы вы к ним не применяли функции, они не производят in-place замены (то есть не производят изменения самой строки). Любые строковые функции, примененные к строкам, возвращают<strong>новую</strong>строку. Это верно и в том случае, когда мы обращаемся к конкретному символу в строке.</p>
41 <p>Пример:</p>
41 <p>Пример:</p>
42 <h3>Лексикографический порядок</h3>
42 <h3>Лексикографический порядок</h3>
43 <p>Лексикографический порядок - это, другими словами, алфавитный порядок. Такой порядок используется в словарях, телефонных справочниках, записных книжках и так далее.</p>
43 <p>Лексикографический порядок - это, другими словами, алфавитный порядок. Такой порядок используется в словарях, телефонных справочниках, записных книжках и так далее.</p>
44 <p>В JavaScript вы можете сравнивать строки с помощью &gt; и &lt;, и сравнение будет происходить именно лексикографически.</p>
44 <p>В JavaScript вы можете сравнивать строки с помощью &gt; и &lt;, и сравнение будет происходить именно лексикографически.</p>
45 <p>Помните, '8' это не число, а строка.</p>
45 <p>Помните, '8' это не число, а строка.</p>
46 <h3>Интерполяция</h3>
46 <h3>Интерполяция</h3>
47 <p>Кроме одиночных '' и двойных кавычек "", современный JavaScript содержит обратные тики (backticks):</p>
47 <p>Кроме одиночных '' и двойных кавычек "", современный JavaScript содержит обратные тики (backticks):</p>
48 <p>``</p>
48 <p>``</p>
49 <p>С обратными тиками вы можете использовать<strong>интерполяцию</strong>, вместо конкатенации. Вот, смотрите:</p>
49 <p>С обратными тиками вы можете использовать<strong>интерполяцию</strong>, вместо конкатенации. Вот, смотрите:</p>
50 <p>Такой код выведет на экран His name was Alex and his age was 22. Внутрь ${} вы можете поместить любое выражение.</p>
50 <p>Такой код выведет на экран His name was Alex and his age was 22. Внутрь ${} вы можете поместить любое выражение.</p>
51 <p><strong>Интерполяция</strong>- способ соединения строк через вставку значений переменных в строку-шаблон с помощью фигурных скобок.</p>
51 <p><strong>Интерполяция</strong>- способ соединения строк через вставку значений переменных в строку-шаблон с помощью фигурных скобок.</p>
52 <p><strong>Интерполяция предпочтительнее конкатенации</strong>. Мы советуем не использовать конкатенацию вообще. Вот некоторые из причин:</p>
52 <p><strong>Интерполяция предпочтительнее конкатенации</strong>. Мы советуем не использовать конкатенацию вообще. Вот некоторые из причин:</p>
53 <ul><li>Такой код заставляет больше думать, потому что синтаксически + больше смахивает на сложение.</li>
53 <ul><li>Такой код заставляет больше думать, потому что синтаксически + больше смахивает на сложение.</li>
54 <li>Из-за слабой типизации можно легко получить не тот результат. Конкатенация может породить ошибки.</li>
54 <li>Из-за слабой типизации можно легко получить не тот результат. Конкатенация может породить ошибки.</li>
55 <li>Сложные строки при использовании конкатенации невозможно нормально разобрать в голове и понять, как они устроены.</li>
55 <li>Сложные строки при использовании конкатенации невозможно нормально разобрать в голове и понять, как они устроены.</li>
56 </ul><h2>Выводы</h2>
56 </ul><h2>Выводы</h2>
57 <ul><li>Строка - это последовательность символов</li>
57 <ul><li>Строка - это последовательность символов</li>
58 <li>Пустая строка - это тоже строка (последовательность нуля символов)</li>
58 <li>Пустая строка - это тоже строка (последовательность нуля символов)</li>
59 <li>Обозначается единичными или двойными кавычками</li>
59 <li>Обозначается единичными или двойными кавычками</li>
60 </ul><p>Создание строки с константой:</p>
60 </ul><p>Создание строки с константой:</p>
61 <p>Возможно включить кавычку одного типа внутрь строки, окружив её кавычками другого типа:</p>
61 <p>Возможно включить кавычку одного типа внутрь строки, окружив её кавычками другого типа:</p>
62 <p>Если в строке используются кавычки того же типа, они должны быть<strong>экранированы</strong>с помощью обратного слеша \:</p>
62 <p>Если в строке используются кавычки того же типа, они должны быть<strong>экранированы</strong>с помощью обратного слеша \:</p>
63 <p>Если строка включает обратный слеш (именно как символ, который хочется иметь в строке), он должен быть экранирован другим обратным слешем:</p>
63 <p>Если строка включает обратный слеш (именно как символ, который хочется иметь в строке), он должен быть экранирован другим обратным слешем:</p>
64 <p>Также существуют<strong>управляющие символы</strong>- специальные комбинации, которые генерируют невидимые детали:</p>
64 <p>Также существуют<strong>управляющие символы</strong>- специальные комбинации, которые генерируют невидимые детали:</p>
65 <p>\t - это табуляция, \n это перенос на новую строку.</p>
65 <p>\t - это табуляция, \n это перенос на новую строку.</p>
66 <h3>Конкатенация строк</h3>
66 <h3>Конкатенация строк</h3>
67 <p>Строки могут склеиваться друг с другом. Такой процесс называется<strong>конкатенацией</strong>и задаётся символом +:</p>
67 <p>Строки могут склеиваться друг с другом. Такой процесс называется<strong>конкатенацией</strong>и задаётся символом +:</p>
68 <p>Строки будут склеены в том порядке, в котором они указаны: "mos" + "cow" → "moscow", а "cow" + "mos" → "cowmos"</p>
68 <p>Строки будут склеены в том порядке, в котором они указаны: "mos" + "cow" → "moscow", а "cow" + "mos" → "cowmos"</p>
69 <h3>Доступ к индивидуальным символам</h3>
69 <h3>Доступ к индивидуальным символам</h3>
70 <p>str[i] это i-ый символ строки str, начинающейся с 0. Например, "hexlet"[0] это h, а "hexlet"[2] это x.</p>
70 <p>str[i] это i-ый символ строки str, начинающейся с 0. Например, "hexlet"[0] это h, а "hexlet"[2] это x.</p>
71 <p>Вот функция, которая принимает строку и возвращает копию этой строки без каждой второй буквы. Например, "hexlet" становится "hxe".</p>
71 <p>Вот функция, которая принимает строку и возвращает копию этой строки без каждой второй буквы. Например, "hexlet" становится "hxe".</p>
72 <p>str.length это длина str, то есть количество символов. Это просто количество, поэтому мы<strong>не</strong>начинаем отсчёт от 0. Например, "food".length это 4.</p>
72 <p>str.length это длина str, то есть количество символов. Это просто количество, поэтому мы<strong>не</strong>начинаем отсчёт от 0. Например, "food".length это 4.</p>