Добрый день! В этой лекции мы рассмотрим обработку исключений и то, как ее производить в JavaScript. Так как JavaScript является языком с динамической типизацией, то внутри ваших методов могут быть переданы фактически любые значения или вообще ничего не передано и метод будет вызван без аргументов. Как нам поступить в данном случае? Вы либо можете обработать все возможные варианты всех возможных значений всех возможных типов данных и как-то отреагировать на это, либо построить так называемый контракт между вами, как разработчиком библиотеки, и потребителем этой библиотеки, сообщая ему, что вы принимаете только определенные типы данных с определенными вариантами значений. В любом противном случае, вы кидаете ошибку определенного типа, так называемое исключение. Разберем это подробно на нашем примере про установление количества лайков. Количество лайков должно быть целым числом больше 0. Сначала мы делаем parseInt, чтобы привести то, что у нас было передано в качестве аргумента, к числу, и если у нас не получается, мы получаем not a number и кидаем исключение. Но если это все-таки число, то мы проверяем, что оно больше 0, и если это не так, то мы кидаем исключение. В любом случае, если что-то пошло не так и у нас передали некорректное значение, мы выбрасываем исключение определенного типа. Если все хорошо и пользователь библиотеки передал корректное значение, то мы пропускаем этот блок кода и идем дальше. Что же делать пользователю, если выброшено исключение, как ему его обработать? Рассмотрим это подробнее. В JavaScript для обработки исключений существует специальная конструкция — try catch. Она состоит из двух блоков: блока try, внутри которого пользователь библиотеки должен вызвать методы, которые потенциально могут вызвать исключения, и блока catch, внутри которого будет передан объект исключения и внутри которого можно произвести его обработку. Итак, мы вызвали метод setLikes и передали в него строчку. После этого будет выброшено исключение. Мы можем проверить, что это исключение соответствует определенному классу. Таким образом, мы знаем, что исключение этого класса бывает только тогда, когда пользователь установил некорректное значение. И мы сбрасываем его в 0. После этого продолжается успешная обработка функций и работа вашего кода продолжается. Объект исключения содержит много полезных для нас данных. В нем есть свойство Name, которое в виде строки содержит имя исключения и имя класса исключения, которое было выброшено; свойство message, которое содержит текстовое представление об ошибке, которую отправил потребитель в вашей библиотеке; и поле stack, которое содержит stack вызовов от самого начального до того момента, пока не было произведено исключение, По нему вы можете понять, в каком участке вашего кода что-то пошло не так. На этом все.