<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mikhail Shokun</title>
    <description>The latest articles on DEV Community by Mikhail Shokun (@minishok).</description>
    <link>https://dev.to/minishok</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F889450%2F7975e2d9-8318-48eb-be88-14f660dd21e5.jpg</url>
      <title>DEV Community: Mikhail Shokun</title>
      <link>https://dev.to/minishok</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/minishok"/>
    <language>en</language>
    <item>
      <title>Типизация TS</title>
      <dc:creator>Mikhail Shokun</dc:creator>
      <pubDate>Sun, 23 Apr 2023 12:06:26 +0000</pubDate>
      <link>https://dev.to/minishok/tipizatsiia-ts-b14</link>
      <guid>https://dev.to/minishok/tipizatsiia-ts-b14</guid>
      <description>&lt;p&gt;&lt;strong&gt;Явное присваивание&lt;/strong&gt;&lt;br&gt;
Типы в TypeScript объявляются следующим синтаксисом:&lt;br&gt;
&lt;code&gt;переменная: тип = значение&lt;/code&gt;&lt;br&gt;
Мы можем присвоить любой тип, который есть в JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const foo: string = '12rock';
const bar: number = 123;
const fee: boolean = true;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Неявное присваивание&lt;/strong&gt;&lt;br&gt;
Однако, TypeScript сам умеет определять типы. Если мы объявим переменную и сразу присвоим ей значение, то TypeScript все поймет и запись с двоеточием можно будет опустить:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const foo = '12rock'; //TS сам поймет что здесь храняться только строки
const bar = 123; // TS поймет что числа
const fee = true; // TS поймет что булевы значения
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Объединение&lt;/strong&gt;&lt;br&gt;
Типы можно объединять, сам процесс так и называется объединение. Записывается он так:&lt;br&gt;
&lt;code&gt;переменная: тип1 | тип2 = значение;&lt;/code&gt;&lt;br&gt;
На данный код внизу компилятор не выдаст ошибку:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let foo: number | string = 123;
foo = '123';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Встроенные типы и неявная типизация&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Вопрос&lt;/em&gt;: Но как типизировать переменную, которая например содержит дату? Что нам с ней делать?!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ответ&lt;/em&gt;: Для таких случаев в TypeScript уже существуют встроенные типы из JavaScript.&lt;/p&gt;

&lt;p&gt;Мы можем объявить дату вот так:&lt;br&gt;
&lt;code&gt;const date: Date = new Date;&lt;/code&gt;&lt;br&gt;
Встроенных типов очень много, поэтому TypeScript может определять тип без явного указания.&lt;br&gt;
Как это работает? Просто инициализируйте переменную, при инициализации TypeScript сам подберет нужный тип.&lt;br&gt;
&lt;code&gt;const date = new Date;&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Типизация функций&lt;/strong&gt;&lt;br&gt;
Нам нужно типизировать входные и данные и данные которые нам функция отдает (выходные): &lt;br&gt;
&lt;code&gt;function имя(параметр: тип, параметр: тип, ...): тип выходного значения {}&lt;/code&gt;&lt;br&gt;
Рассмотрим пример, где функция принимает два аргумента и отдает нам их сумму:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function getSum(a: number, b: number): number {
return a + b;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Дженерики&lt;/strong&gt;&lt;br&gt;
Дженерик - Array - указываем Array и в треугольных скобках то, из чего может состоять данный класс или объект.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Массив из разных типов&lt;/strong&gt;&lt;br&gt;
Тип данных Tuple, где мы можем указать из какого множества типов он состоит, например: const contact: [string, number] = ['Michael', 46570294]&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Тип &lt;em&gt;never&lt;/em&gt; *&lt;/em&gt;&lt;br&gt;
Используется в тех случаях когда функция может никогда не закончится (странный тип, пригодиться наверное не часто, но нужно про него знать)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;br&gt;
Также можно создавать свои типы через ключевое слово &lt;code&gt;type&lt;/code&gt;, пример: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
type Login = string;&lt;br&gt;
const login: Login = 'qwerty'&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
также можно указывать через бинарный оператор "|" ИЛИ какими типами может быть переменная: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
type Login = number | string;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Типы &lt;code&gt;null&lt;/code&gt; и &lt;code&gt;undefined&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Обычно записывается в проектах так:&lt;br&gt;
&lt;code&gt;type Name = string | null | undefined&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interfaces&lt;/strong&gt;&lt;br&gt;
Поля в интерфейсах могут быть только читаемые (&lt;code&gt;readonly id: number&lt;/code&gt;), неизменяемые. Также свойства могут быть необязательными (&lt;code&gt;color?: string&lt;/code&gt;). Пример:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface Rect {
 readonly id: string
 color?: string
 size: {
   width: number
   height: number
 }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;применение типа:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const rect1: Rect = {
 id: '1234',
 size: {
  width: 30,
  height: 20
 },
color: '#fff'
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Интерфейсы часто называют с первой большой буквой "I", чтобы было понятно что это интерфейс. Интерфейсы могут наследоваться:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;interface RectWithArea extends Rect {
  getArea: () =&amp;gt; number
}

const rect5: RectWithArea = {
  id: '123',
  size: {
    width: 20,
    height: 20
  },
  getArea(): number {
    return this.size.width * this.size.height
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;большая часть информации взятая &lt;a href="https://vc.ru/dev/423888-krupnyy-gayd-po-typescript"&gt;отсюда&lt;/a&gt; &lt;br&gt;
автор: Даниил Шило&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Собеседование React.JS</title>
      <dc:creator>Mikhail Shokun</dc:creator>
      <pubDate>Thu, 14 Jul 2022 08:27:39 +0000</pubDate>
      <link>https://dev.to/minishok/sobiesiedovaniie-reactjs-1cke</link>
      <guid>https://dev.to/minishok/sobiesiedovaniie-reactjs-1cke</guid>
      <description>&lt;h2&gt;
  
  
  1 Что такое React?
&lt;/h2&gt;

&lt;p&gt;● React - JavaScript фронтенд библиотека, разработанная Facebook в 2011&lt;br&gt;
● В ядре - компонентный подход, позволяющий создавать переиспользуемые UI&lt;br&gt;
блоки&lt;br&gt;
● Служит, для создания сложных интерактивных UI для web и мобильной&lt;br&gt;
разработки&lt;/p&gt;

&lt;h2&gt;
  
  
  2 Какие основные преимущества есть в React?
&lt;/h2&gt;

&lt;p&gt;● Увеличивает производительность отрисовки приложений&lt;br&gt;
● Может использоваться и на клиенте и на сервере&lt;br&gt;
● Из-за JSX читаемость кода увеличивается&lt;br&gt;
● Легко интегрировать с другими фреймворками&lt;br&gt;
● Легко писать unit тесты&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Какие есть ограничения в React?
&lt;/h2&gt;

&lt;p&gt;● React - всего лишь библиотека&lt;br&gt;
● Требуется некоторое время на освоение&lt;br&gt;
● Может быть немного сложным для начинающих&lt;br&gt;
● Код по-началу может выглядеть сложным из-за инфраструктуры и JSX&lt;/p&gt;

&lt;h2&gt;
  
  
  4 Что такое JSX?
&lt;/h2&gt;

&lt;p&gt;JSX - ярлык для JavaScript XML. Это специальный синтаксис, который расширяет&lt;br&gt;
JavaScript возможностью писать HTML внутри&lt;br&gt;
Это позволяет интегрировать шаблоны компонентов прямо в JavaScript, что делает&lt;br&gt;
разработку проще&lt;/p&gt;

&lt;h2&gt;
  
  
  5 Что такое Virtual DOM в React?
&lt;/h2&gt;

&lt;p&gt;Virtual DOM - легковесный JavaScript объект, который представляет копию реального&lt;br&gt;
DOM дерева. Нужен для оптимизации взаимодействия с DOM&lt;/p&gt;

&lt;h2&gt;
  
  
  6 Что такое Props?
&lt;/h2&gt;

&lt;p&gt;Сокращенно от Properties. Входящие свойства в компонент. Они только для чтения и&lt;br&gt;
их нельзя менять. Всегда идут от родителя к ребенку.&lt;/p&gt;

&lt;h2&gt;
  
  
  7 Что такое state и как он используется?
&lt;/h2&gt;

&lt;p&gt;Обычный объект - источник данных. Содержит информацию по поведению и&lt;br&gt;
состоянию интерфейса. Можно мутировать&lt;/p&gt;

&lt;h2&gt;
  
  
  8 Что такое refs в React?
&lt;/h2&gt;

&lt;p&gt;Сокращенно от References. Специальный атрибут, позволяющий получить доступ до&lt;br&gt;
конкретного DOM элемента&lt;br&gt;
Нужен для:&lt;br&gt;
● Вызова анимаций&lt;br&gt;
● Для задания фокуса или выделения текста&lt;br&gt;
● Взаимодействия со сторонними библиотеками&lt;/p&gt;

&lt;h2&gt;
  
  
  9 Что такое JEST?
&lt;/h2&gt;

&lt;p&gt;JavaScript фреймворк, для юнит тестирования на основе Jasmine. Разработал&lt;br&gt;
Facebook. Очень удобен именно для React&lt;/p&gt;

&lt;h2&gt;
  
  
  10 Когда следует использовать Class компоненты, а когда
&lt;/h2&gt;

&lt;p&gt;функциональные?&lt;br&gt;
Если нужны жизненные этапы компонента - используем class компоненты&lt;br&gt;
Иначе для оптимизации лучше функциональные&lt;/p&gt;

&lt;h2&gt;
  
  
  11 Что происходит, когда вы вызываете setState?
&lt;/h2&gt;

&lt;p&gt;Вначале React соединяет объект стейта с измененными полями. На основе нового&lt;br&gt;
состояния строит новое дерево React элементов и выясняет, какие именно части&lt;br&gt;
приложения должны быть изменены&lt;br&gt;
Это нужно для наиболее производительного обновления интерфейса&lt;/p&gt;

&lt;h2&gt;
  
  
  12 В чем разница между state и props?
&lt;/h2&gt;

&lt;p&gt;state - структура данных, необходимая для изменения и отслеживания&lt;br&gt;
пользовательских действий&lt;br&gt;
props - набор конфигурации, поступающий от родительского элемента. Их нельзя&lt;br&gt;
изменять&lt;/p&gt;

&lt;h2&gt;
  
  
  13 Когда следует делать асинхронные запросы на сервер в React?
&lt;/h2&gt;

&lt;p&gt;Для этого служит метод componentDidMount&lt;br&gt;
Или useEffect с &lt;em&gt;пустым набором зависимостей&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  14 В чем смысл специального атрибута key?
&lt;/h2&gt;

&lt;p&gt;Атрибут позволяет React понимать, какие именно элементы в списке были&lt;br&gt;
модифицированы или удалены, что увеличивает производительность рендеринга.&lt;br&gt;
Лучше всего использовать уникальные значения, такие как ID. Индексы использовать&lt;br&gt;
не рекомендуется&lt;/p&gt;

&lt;h2&gt;
  
  
  15 Что значит компонент mounted?
&lt;/h2&gt;

&lt;p&gt;Шаблон компонента соединен с DOM деревом&lt;/p&gt;

&lt;h2&gt;
  
  
  16 Назовите разницу между контролируемым и
&lt;/h2&gt;

&lt;p&gt;неконтролируемым компонентом&lt;br&gt;
● Контролируемый компонент обладает своим стейтом, управляемый React&lt;br&gt;
● Неконтролируемые компоненты обладают внутренним стейтом (как пример&lt;br&gt;
значение тега textarea)&lt;/p&gt;

&lt;h2&gt;
  
  
  17 Что такое фрагменты?
&lt;/h2&gt;

&lt;p&gt;Специальный элемент в React позволяющий возвращать группу элементов без&lt;br&gt;
дополнительного родительского DOM элемента&lt;/p&gt;

&lt;h2&gt;
  
  
  18 Как React обрабатывает пользовательские события?
&lt;/h2&gt;

&lt;p&gt;Добавляет один обработчик события на корневой элемент.&lt;br&gt;
Объект события оборачивает в свою обертку - SyntheticEvent для кроссбраузерности&lt;/p&gt;

&lt;h2&gt;
  
  
  19 Что такое Redux?
&lt;/h2&gt;

&lt;p&gt;Библиотека для работы с потоком данных в JavaScript.&lt;br&gt;
Позволяет добавить дополнительный слой для приложения, где состояние описано в&lt;br&gt;
JavaScript объекте. Нужно для более удобного написания кода&lt;/p&gt;

&lt;h2&gt;
  
  
  20 Назовите основные этапы жизненного цикла компонента
&lt;/h2&gt;

&lt;p&gt;● componentWillMount - перед рендерингом, в основном для настройки&lt;br&gt;
компонента&lt;br&gt;
● render - процесс рендеринга&lt;br&gt;
● componentDidMount - уведомляет, про то, что компонент соединен с DOM&lt;br&gt;
деревом&lt;br&gt;
● componentWillReceiveProps - уведомляет, про то, что приходят новые&lt;br&gt;
входящие свойства в компонент&lt;br&gt;
● shouldComponentUpdate - возвращает true или false и служит для&lt;br&gt;
оптимизации. Решает, нужно ли делать ре-рендеринг&lt;br&gt;
● componentWillUpdate - уведомляет, что компонент будет обновлен&lt;br&gt;
● componentDidUpdate - уведомляет, что компонент был обновлен&lt;br&gt;
● componentWillUnmount - используется для удаления слушателей и очистки&lt;br&gt;
компонента. Вызывается перед удалением компонента&lt;/p&gt;

&lt;h2&gt;
  
  
  21 В setState можно передавать объект или функцию. В чем
&lt;/h2&gt;

&lt;p&gt;разница и что лучше использовать?&lt;br&gt;
props и state могут изменяться асинхронно. Если мы передадим функцию, то мы&lt;br&gt;
точно будет знать, что стейт основывается на предыдущем состоянии&lt;/p&gt;

&lt;h2&gt;
  
  
  22 Назовите разницу между Презентационным и Контейнер
&lt;/h2&gt;

&lt;p&gt;компонентом?&lt;br&gt;
● Презентационный - “как вещи выглядят”. Нужен для создания интерфейса.&lt;br&gt;
Работает на входящих параметрах&lt;br&gt;
● Контейнер - “как вещи работают”. Обладают состоянием, подключены к Flux или&lt;br&gt;
Redux&lt;/p&gt;

&lt;h2&gt;
  
  
  23 Что такое Context?
&lt;/h2&gt;

&lt;p&gt;Context - позволяет передавать свойства от родителя к ребенку, избегая&lt;br&gt;
промежуточных компонентов&lt;/p&gt;

&lt;h2&gt;
  
  
  24 Что такое Higher-Order компоненты?
&lt;/h2&gt;

&lt;p&gt;Higher-order component (HOC) - функции, у которых входящий параметр компонент.&lt;br&gt;
Возвращают новый компонент с добавленным поведением.&lt;br&gt;
Могут быть использованы в следующих случаях:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Переиспользование кода&lt;/li&gt;
&lt;li&gt;Слой абстракции для state и взаимодействия с ним&lt;/li&gt;
&lt;li&gt;Управление props&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  25 Что делает shouldComponentUpdate и почему он важен?
&lt;/h2&gt;

&lt;p&gt;Этап жизненного цикла, который решает, будет ли ре-рендер, или нет&lt;br&gt;
Позволяет оптимизировать приложение&lt;/p&gt;

&lt;h2&gt;
  
  
  26 Что такое store в Redux?
&lt;/h2&gt;

&lt;p&gt;JavaScript объект, в котором содержится состояние приложения. Дополнительно&lt;br&gt;
отвечает за следующее:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;state может быть получен через getState()&lt;/li&gt;
&lt;li&gt;Изменять state можно через dispatch(action)&lt;/li&gt;
&lt;li&gt;Регистрировать изменения через subscribe(listener)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  27 Что такое action в Redux?
&lt;/h2&gt;

&lt;p&gt;Объект, который обязательно должен содержать ключ type. С помощью него Redux&lt;br&gt;
понимает, что именно нужно сделать со стейтом&lt;/p&gt;

&lt;h2&gt;
  
  
  28 Что нельзя делать в методе render?
&lt;/h2&gt;

&lt;p&gt;Нельзя изменять состояние компонента (например вызывать setState). Должен быть&lt;br&gt;
чистой (pure) функцией&lt;/p&gt;

&lt;h2&gt;
  
  
  29 Какие типы middleware есть в redux для работы с
&lt;/h2&gt;

&lt;p&gt;асинхронностью?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Redux Thunk&lt;/li&gt;
&lt;li&gt;Redux Promise&lt;/li&gt;
&lt;li&gt;Redux Saga
30 Что такое Pure Components?
Тоже самое, что и Component, кроме того, что автоматически за вас реализует метод
shouldComponentUpdate.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Подготовка к первому собесу</title>
      <dc:creator>Mikhail Shokun</dc:creator>
      <pubDate>Sun, 10 Jul 2022 14:38:28 +0000</pubDate>
      <link>https://dev.to/minishok/podghotovka-k-piervomu-sobiesu-1je</link>
      <guid>https://dev.to/minishok/podghotovka-k-piervomu-sobiesu-1je</guid>
      <description>

&lt;p&gt;У меня в четверг 14.07.2022 должен быть первый собес. Сегодня воскресенье, сижу готовлюсь к собесу. Составил некоторый список, по которому нужно пройтись и повторить, а некоторое выучить заново (я не знаю про контекст (&lt;code&gt;this&lt;/code&gt;) ничего, про promise и т.д.).&lt;/p&gt;

&lt;h2&gt;
  
  
  Список тем:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Переменные&lt;/li&gt;
&lt;li&gt;Типы данных&lt;/li&gt;
&lt;li&gt;Операторы&lt;/li&gt;
&lt;li&gt;Преобразование типов&lt;/li&gt;
&lt;li&gt;Циклы&lt;/li&gt;
&lt;li&gt;Функции&lt;/li&gt;
&lt;li&gt;Рекурсия и стек&lt;/li&gt;
&lt;li&gt;Контекст (this)&lt;/li&gt;
&lt;li&gt;Генераторы, итераторы&lt;/li&gt;
&lt;li&gt;Fetch&lt;/li&gt;
&lt;li&gt;Promise&lt;/li&gt;
&lt;li&gt;async/await&lt;/li&gt;
&lt;li&gt;Работа с DOM&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  1. Переменные
&lt;/h2&gt;

&lt;p&gt;Переменная – это «именованное хранилище» для данных. &lt;br&gt;
Имя переменной должно содержать только буквы, цифры или символы $ и _.&lt;br&gt;
Первый символ не должен быть цифрой.&lt;br&gt;
Существует 2 основных отличия &lt;code&gt;var&lt;/code&gt; от &lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt;:&lt;br&gt;
Переменные &lt;code&gt;var&lt;/code&gt; не имеют блочной области видимости, они ограничены, как минимум, телом функции.&lt;br&gt;
Объявления (инициализация) переменных &lt;code&gt;var&lt;/code&gt; производится в начале исполнения функции (или скрипта для глобальных переменных).&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Типы данных
&lt;/h2&gt;

&lt;p&gt;Есть JavaScript 8 основных типов данных:&lt;br&gt;
&lt;code&gt;Number&lt;/code&gt; &lt;code&gt;BigInt&lt;/code&gt; &lt;code&gt;string&lt;/code&gt; &lt;code&gt;boolean&lt;/code&gt; &lt;br&gt;
&lt;code&gt;null&lt;/code&gt; &lt;code&gt;undefined&lt;/code&gt; &lt;code&gt;object&lt;/code&gt; &lt;code&gt;symbol&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Переменная в JavaScript может содержать любые данные. В один момент там может быть строка, а в другой – число.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;number&lt;/code&gt; для любых чисел: целочисленных или чисел с плавающей точкой; целочисленные значения ограничены диапазоном ±(253-1). Кроме обычных чисел, существуют так называемые «специальные числовые значения», которые относятся к этому типу данных: Infinity, -Infinity и NaN.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;bigint&lt;/code&gt; для целых чисел произвольной длины. Чтобы создать значение типа BigInt, необходимо добавить &lt;code&gt;n&lt;/code&gt; в конец числового литерала.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;string&lt;/code&gt; для строк. Строка может содержать ноль или больше символов, нет отдельного символьного типа.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;boolean&lt;/code&gt; для true/false.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;null&lt;/code&gt; для неизвестных значений – отдельный тип, имеющий одно значение null.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;undefined&lt;/code&gt; для неприсвоенных значений – отдельный тип, имеющий одно значение undefined.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;symbol&lt;/code&gt; для уникальных идентификаторов.&lt;/p&gt;

&lt;p&gt;Тип object (&lt;code&gt;объект&lt;/code&gt;) – особенный. Все остальные типы называются «примитивными», потому что их значениями могут быть только простые значения (будь то строка, или число, или что-то ещё). В объектах же хранят коллекции данных или более сложные структуры.&lt;/p&gt;

&lt;p&gt;Оператор &lt;strong&gt;typeof&lt;/strong&gt; возвращает тип аргумента. Это полезно, когда мы хотим обрабатывать значения различных типов по-разному или просто хотим сделать проверку.&lt;br&gt;
У него есть две синтаксические формы:&lt;br&gt;
1) Синтаксис оператора: typeof x.&lt;br&gt;
2) Синтаксис функции: typeof (x).&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Операторы
&lt;/h2&gt;

&lt;p&gt;Есть 3 основных вида операторов:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Базовые (либо математические)&lt;/li&gt;
&lt;li&gt;Операторы сравнения&lt;/li&gt;
&lt;li&gt;Логические операторы&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Математические операторы&lt;/em&gt; в зависимости от применения могут быть двух типов: унарные и бинарные, отличаются от кол-ва операндов, к которым они применяются. Операнд (аргумент) - это то, к чему применяется оператор. Унарный оператор (-800) один операнд. "+" складывает и преобразовывает строки, остальные операторы могут только выполнять арифметические действия, то есть преобразуют все операнды в числа ("25" - 5 = 20 (тип данных Number). Применяя унарный оператор "+" к строке, имеющую цифру (например "25"), оператор преобразует строку в число, то есть + "25" (тип данных &lt;code&gt;Number&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Логические операторы&lt;/em&gt;: цепочка ИЛИ (&lt;code&gt;||&lt;/code&gt;) возвращает первое истинное значение или последнее, если такое значение не найдено.&lt;br&gt;
 И (&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;) возвращает первое ложное значение. Или последнее, если ничего не найдено. Вышеуказанные правила схожи с поведением ИЛИ. Разница в том, что И возвращает первое ложное значение, а ИЛИ –  первое истинное. Приоритет оператора &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; больше, чем у &lt;code&gt;||&lt;/code&gt;. &lt;br&gt;
Оператор НЕ (&lt;code&gt;!&lt;/code&gt;) сначала приводит аргумент к логическому типу true/false, затем возвращает противоположное значение.&lt;/p&gt;

&lt;p&gt;Все &lt;em&gt;операторы сравнения&lt;/em&gt; возвращают значение логического типа (true или false)&lt;/p&gt;
&lt;h2&gt;
  
  
  4. Преобразование типов
&lt;/h2&gt;

&lt;p&gt;Существует 3 наиболее широко используемых преобразования: строковое, численное и логическое.&lt;br&gt;
&lt;em&gt;Строковое&lt;/em&gt; – Происходит, когда нам нужно что-то вывести. Может быть вызвано с помощью &lt;code&gt;String(value)&lt;/code&gt;. Для примитивных значений работает очевидным образом.&lt;br&gt;
&lt;em&gt;Численное&lt;/em&gt; – Происходит в математических операциях. Может быть вызвано с помощью &lt;code&gt;Number(value)&lt;/code&gt;:&lt;br&gt;
&lt;code&gt;undefined&lt;/code&gt; =&amp;gt; &lt;code&gt;NaN&lt;/code&gt;&lt;br&gt;
&lt;code&gt;null&lt;/code&gt; =&amp;gt;  &lt;code&gt;0&lt;/code&gt;&lt;br&gt;
&lt;code&gt;true / false&lt;/code&gt; =&amp;gt;  &lt;code&gt;1 / 0&lt;/code&gt;&lt;br&gt;
&lt;code&gt;string&lt;/code&gt; =&amp;gt; &lt;code&gt;Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0, иначе из непустой строки «считывается» число. При ошибке результат NaN&lt;/code&gt;.&lt;br&gt;
&lt;em&gt;Логическое&lt;/em&gt; – Происходит в логических операциях. Может быть вызвано с помощью &lt;code&gt;Boolean(value)&lt;/code&gt;:&lt;br&gt;
&lt;code&gt;0, null, undefined, NaN, ""&lt;/code&gt; =&amp;gt; &lt;code&gt;false&lt;/code&gt;&lt;br&gt;
&lt;code&gt;любое другое значение&lt;/code&gt; =&amp;gt; &lt;code&gt;true&lt;/code&gt;&lt;br&gt;
Большую часть из этих правил легко понять и запомнить. Особые случаи, в которых часто допускаются ошибки:&lt;br&gt;
&lt;code&gt;undefined&lt;/code&gt; при численном преобразовании становится &lt;code&gt;NaN&lt;/code&gt;, не &lt;code&gt;0&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;"0"&lt;/code&gt; и строки из одних пробелов типа &lt;code&gt;" "&lt;/code&gt; при логическом преобразовании всегда &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Циклы
&lt;/h2&gt;

&lt;p&gt;Циклы - простой способ сделать какое-то действие несколько раз. &lt;br&gt;
Цикл &lt;strong&gt;&lt;code&gt;for&lt;/code&gt;&lt;/strong&gt;  повторяет действия, пока не произойдёт какое-либо специальное событие завершения цикла.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for ([начало]; [условие]; [шаг]) выражения
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Цикл &lt;strong&gt;&lt;code&gt;do...while&lt;/code&gt;&lt;/strong&gt; повторяется пока заданное условие истинно.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;do
  выражения
while (условие);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Пример&lt;/em&gt;:&lt;br&gt;
В следующем примере, цикл &lt;code&gt;do&lt;/code&gt; выполнится минимум 1 раз и запускается снова, пока i меньше 5.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;do {
  i += 1;
  console.log(i);
} while (i &amp;lt; 5);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Цикл &lt;strong&gt;&lt;code&gt;while&lt;/code&gt;&lt;/strong&gt; выполняет выражения пока условие истинно. Выглядит он так:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while (условие)
  выражения
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Метка (&lt;strong&gt;&lt;code&gt;label&lt;/code&gt;&lt;/strong&gt;) представляет собой оператор с идентификатором, который позволяет вам ссылаться на какое-то место в вашей программе. Например, вы можете использовать метку, чтобы обозначить цикл, а затем использовать операторы &lt;code&gt;break&lt;/code&gt; или &lt;code&gt;continue&lt;/code&gt;, чтобы указать, должна ли программа прерывать цикл или продолжать его выполнение:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;метка :
   оператор
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;В этом примере, метка &lt;code&gt;markLoop&lt;/code&gt; обозначает цикл &lt;code&gt;while&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;markLoop:
while (theMark == true) {
   doSomething();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Используйте оператор &lt;strong&gt;&lt;code&gt;break&lt;/code&gt;&lt;/strong&gt;, чтобы прерывать цикл, переключать управление или в сочетании с оператором &lt;code&gt;Label&lt;/code&gt;. Синтаксис оператора может быть таким:&lt;br&gt;
1) &lt;em&gt;break&lt;/em&gt;;&lt;br&gt;
2) &lt;em&gt;break Label&lt;/em&gt;;&lt;br&gt;
Оператор &lt;strong&gt;&lt;code&gt;continue&lt;/code&gt;&lt;/strong&gt; используется, чтобы шагнуть на шаг вперёд в циклах &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;do-while&lt;/code&gt;, &lt;code&gt;for&lt;/code&gt; или перейти к &lt;code&gt;метке&lt;/code&gt;. Синтаксис continue может выглядеть так:&lt;br&gt;
1) &lt;em&gt;continue&lt;/em&gt;;&lt;br&gt;
2) &lt;em&gt;continue Метка&lt;/em&gt;;&lt;/p&gt;

&lt;p&gt;Оператор &lt;strong&gt;&lt;code&gt;for...in&lt;/code&gt;&lt;/strong&gt; проходит по всем перечислимым свойствам объекта. JavaScript выполнит указанные выражения для каждого отдельного свойства:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (variable in object) {
  выражения
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Функции
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Создание функции:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Объявление функции&lt;/em&gt; (&lt;strong&gt;Function Declaration&lt;/strong&gt;) по синтаксису является инструкцией (statement) и состоит из следующих частей:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function square(number) {
  return number * number;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Существует ещё один синтаксис создания функций, который называется &lt;strong&gt;Function Expression&lt;/strong&gt; (&lt;em&gt;Функциональное Выражение&lt;/em&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let sayHi = square(number) {
  return number * number;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Функции вида "&lt;code&gt;function expression&lt;/code&gt;" удобны, когда функция передаётся аргументом другой функции.&lt;/p&gt;

&lt;p&gt;Отличия &lt;strong&gt;Function Expression&lt;/strong&gt; в сравнении с &lt;strong&gt;Function Declaration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Во-первых, синтаксис: как определить, что есть что в коде.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Function Declaration: функция объявляется отдельной конструкцией «function…» в основном потоке кода:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sum(a, b) {
  return a + b;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Function Expression: функция, созданная внутри другого выражения или синтаксической конструкции. В данном случае функция создаётся в правой части «выражения присваивания» =:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let sum = function(a, b) {
  return a + b;
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Более тонкое отличие состоит, в том, когда создаётся функция движком JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Function Expression&lt;/strong&gt; создаётся, когда выполнение &lt;strong&gt;&lt;em&gt;доходит до него&lt;/em&gt;&lt;/strong&gt;, и затем уже &lt;em&gt;может использоваться&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;После того, как поток выполнения достигнет правой части выражения присваивания let sum = function… – с этого момента, функция считается созданной и может быть использована (присвоена переменной, вызвана и т.д. ).&lt;/p&gt;

&lt;p&gt;С &lt;em&gt;Function Declaration&lt;/em&gt; всё иначе.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Function Declaration &lt;em&gt;можно использовать во всем скрипте&lt;/em&gt;&lt;/strong&gt; (или блоке кода, если функция объявлена в блоке).&lt;/p&gt;

&lt;p&gt;Другими словами, когда движок JavaScript готовится выполнять скрипт или блок кода, прежде всего он ищет в нём &lt;em&gt;Function Declaration&lt;/em&gt; и создаёт все такие функции. Можно считать этот процесс «стадией инициализации».&lt;br&gt;
И только после того, как все объявления &lt;em&gt;Function Declaration&lt;/em&gt; будут обработаны, продолжится выполнение.&lt;br&gt;
В результате, функции, созданные, как &lt;em&gt;Function Declaration&lt;/em&gt; могут быть вызваны раньше своих определений.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Метод&lt;/strong&gt; — &lt;em&gt;это функция, которая является свойством объекта&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  7. Рекурсия и стек
&lt;/h2&gt;

&lt;p&gt;Функция может вызывать саму себя. Три способа такого вызова:&lt;/p&gt;

&lt;p&gt;1) по имени функции&lt;br&gt;
2) arguments.callee&lt;br&gt;
3) по переменной, которая ссылается на функцию&lt;/p&gt;

&lt;p&gt;Функция, которая вызывает саму себя, называется &lt;strong&gt;рекурсивной функцией&lt;/strong&gt; (recursive function). Получается, что рекурсия аналогична циклу (loop). Оба вызывают некоторый код несколько раз, и оба требуют условия (чтобы избежать бесконечного цикла, вернее бесконечной рекурсии). Информация о процессе выполнения запущенной функции хранится в её контексте выполнения (&lt;em&gt;execution context&lt;/em&gt;). &lt;em&gt;&lt;strong&gt;Контекст выполнения&lt;/strong&gt;&lt;/em&gt; – специальная внутренняя структура данных, которая содержит информацию о вызове функции&lt;/p&gt;
&lt;h2&gt;
  
  
  8. Контекст (&lt;code&gt;this&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Значение &lt;code&gt;this&lt;/code&gt; – это объект «перед точкой», который использовался для вызова метода.&lt;br&gt;
Функции, которые находятся в объекте в качестве его свойств, называются «методами».&lt;br&gt;
Методы позволяют объектам «действовать»: &lt;code&gt;object.doSomething()&lt;/code&gt;.&lt;br&gt;
Методы &lt;em&gt;могут ссылаться на объект&lt;/em&gt; через &lt;code&gt;this&lt;/code&gt;.&lt;br&gt;
Значение &lt;code&gt;this&lt;/code&gt; определяется во время &lt;em&gt;исполнения&lt;/em&gt; кода.&lt;/p&gt;

&lt;p&gt;При объявлении любой функции в ней можно использовать &lt;code&gt;this&lt;/code&gt;, но этот &lt;code&gt;this&lt;/code&gt; не имеет значения до тех пор, пока функция не будет вызвана.&lt;br&gt;
Эта функция может быть скопирована между объектами (из одного объекта в другой).&lt;br&gt;
Когда функция вызывается синтаксисом «метода» – &lt;code&gt;object.method()&lt;/code&gt;, значением &lt;code&gt;this&lt;/code&gt; во время вызова является объект перед точкой.&lt;br&gt;
Также, заметим, что стрелочные функции являются &lt;em&gt;особенными&lt;/em&gt; – у них нет &lt;code&gt;this&lt;/code&gt;. Когда внутри стрелочной функции обращаются к &lt;code&gt;this&lt;/code&gt;, то его значение берётся снаружи.&lt;/p&gt;
&lt;h2&gt;
  
  
  9. Генераторы, итераторы
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Итераторы&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Объект является итератором, если он умеет обращаться к элементам коллекции по одному за раз, при этом отслеживая своё текущее положение внутри этой последовательности. В JavaScript итератор - это объект, который предоставляет метод &lt;code&gt;next()&lt;/code&gt;, возвращающий следующий элемент последовательности. Этот метод возвращает объект с двумя свойствами: done и value.&lt;/p&gt;

&lt;p&gt;После создания, объект-итератор может быть явно использован, с помощью вызовов метода &lt;code&gt;next()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Генераторы&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Генераторы используют для создания итераторов&lt;/em&gt;.&lt;br&gt;
В то время как пользовательские итераторы могут быть весьма полезны, при их программировании требуется уделять серьёзное внимание поддержке внутреннего состояния. Генераторы предоставляют мощную альтернативу: они позволяют определить алгоритм перебора, написав единственную функцию, которая умеет поддерживать собственное состояние.&lt;/p&gt;

&lt;p&gt;Генераторы - это специальный тип функции, который работает как фабрика итераторов. Функция становится генератором, если содержит один или более &lt;code&gt;yield&lt;/code&gt; операторов и использует &lt;code&gt;function*&lt;/code&gt; синтаксис.&lt;/p&gt;
&lt;h2&gt;
  
  
  10. Fetch
&lt;/h2&gt;

&lt;p&gt;Fetch API предоставляет интерфейс JavaScript для работы с запросами и ответами HTTP. Он также предоставляет глобальный метод &lt;code&gt;fetch()&lt;/code&gt;, который позволяет легко и логично получать ресурсы по сети асинхронно.&lt;/p&gt;
&lt;h2&gt;
  
  
  11. Promise
&lt;/h2&gt;

&lt;p&gt;Объект &lt;code&gt;Promise&lt;/code&gt; используется для отложенных и асинхронных вычислений. Promise – это специальный объект, который содержит своё состояние. Вначале pending («ожидание»), затем – одно из: fulfilled («выполнено успешно») или rejected («выполнено с ошибкой»).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Синтаксис&lt;/em&gt;*&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new Promise(executor);
new Promise(function(resolve, reject) { ... });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Пример:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Создаётся объект promise
let promise = new Promise((resolve, reject) =&amp;gt; {

  setTimeout(() =&amp;gt; {
    // переведёт промис в состояние fulfilled с результатом "result"
    resolve("result");
  }, 1000);

});

// promise.then навешивает обработчики на успешный результат или ошибку
promise
  .then(
    result =&amp;gt; {
      // первая функция-обработчик - запустится при вызове resolve
      alert("Fulfilled: " + result); // result - аргумент resolve
    },
    error =&amp;gt; {
      // вторая функция - запустится при вызове reject
      alert("Rejected: " + error); // error - аргумент reject
    }
  );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Конечно, вместо setTimeout внутри функции промиса может быть и запрос к серверу и ожидание ввода пользователя, или другой асинхронный процесс. Главное, чтобы по своему завершению он вызвал resolve или reject, которые передадут результат обработчикам.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. async/await
&lt;/h2&gt;

&lt;p&gt;Объявление &lt;code&gt;async function&lt;/code&gt; определяет асинхронную функцию, которая возвращает объект &lt;code&gt;AsyncFunction&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После вызова функция async возвращает &lt;code&gt;Promise&lt;/code&gt;. Когда результат был получен, Promise завершается, возвращая полученное значение.  Когда функция &lt;code&gt;async&lt;/code&gt; выбрасывает исключение, &lt;code&gt;Promise&lt;/code&gt; ответит отказом с выброшенным (&lt;code&gt;throws&lt;/code&gt;) значением.&lt;/p&gt;

&lt;p&gt;Функция &lt;code&gt;async&lt;/code&gt; может содержать выражение &lt;code&gt;await&lt;/code&gt;, которое приостанавливает выполнение функции &lt;code&gt;async&lt;/code&gt; и ожидает ответа от переданного &lt;code&gt;Promise&lt;/code&gt;, затем возобновляя выполнение функции &lt;code&gt;async&lt;/code&gt; и возвращая полученное значение.&lt;/p&gt;

&lt;p&gt;Ключевое слово &lt;code&gt;await&lt;/code&gt; допустимо только в асинхронных функциях. В другом контексте вы получите ошибку &lt;code&gt;SyntaxError&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Цель функций &lt;code&gt;async/await&lt;/code&gt; упростить использование promises синхронно и воспроизвести некоторое действие над группой  Promises. Точно так же как Promises подобны структурированным колбэкам, &lt;code&gt;async/await&lt;/code&gt; подобна комбинации генераторов и promises.&lt;br&gt;
&lt;strong&gt;Пример:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function add1(x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  13. Работа с DOM
&lt;/h2&gt;

&lt;p&gt;Основой HTML-документа являются теги.&lt;br&gt;
В соответствии с объектной моделью документа («Document Object Model», коротко DOM), каждый HTML-тег является объектом. Вложенные теги являются «детьми» родительского элемента. Текст, который находится внутри тега, также является объектом.&lt;/p&gt;

&lt;p&gt;Все эти объекты доступны при помощи JavaScript, мы можем использовать их для изменения страницы.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>It's my first post</title>
      <dc:creator>Mikhail Shokun</dc:creator>
      <pubDate>Sat, 09 Jul 2022 11:59:36 +0000</pubDate>
      <link>https://dev.to/minishok/its-my-first-post-2dn5</link>
      <guid>https://dev.to/minishok/its-my-first-post-2dn5</guid>
      <description>&lt;p&gt;Hello. Here I will write about my achievements in the &lt;strong&gt;IT-industry&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>react</category>
    </item>
  </channel>
</rss>
