Выкидывание исключений в JavaScript

409
07 февраля 2017, 22:25

Бодрого вечера всем. Есть небольшой вопрос к знатокам javaScript. Очень хотелось бы понять суть отлова исключений, для чего это надо и почему не использовать просто if..else Какое преимущество даёт блок try..catch...finally, какое не даст никто иной Пример кода, работающего одинаково, только один основан на IF...ELSE, а второй TRY...CATCH, суть выполнения одна и та же.

**///Это на основе IF...ELSE**
function sum2(a,b){
    if(typeof (a&&b) === "number") return a+b;
    else if(typeof a !== "number") return "Первый";
    else return "Второй"
}
console.log(sum2(10,2)); //12
console.log(sum2(10,"2")); //Второй
console.log(sum2("10",2)); //Первый
**///Это на основе TRY...CATCH**
function sum(a,b){
    if (typeof (a&&b) === "number") return a+b;
    else throw new Error("Не число");
}
try{
    console.log(sum(1,"2")); //Не число
} catch(e){
    console.log(e.message);
}

Суть не изменилась. Обе функции можно использовать абстрактно. Может кто-нибудь "на пальцах" объяснить основную суть использования TRY...CATCH. Перечитал кучу форумов, и некоторые уверены что дело в стиле программирования и всё. Хотя есть другая когорта программистов, которые считают что отлов исключений даёт некие преимущества, но излагают это таким языком (и преимущественно на СиШарп) что уловить основную идею невозможно. Заранее спасибо.

Answer 1

В большинстве случаев, действительно, почти любой try...catch можно переписать на if...else, НО:

  1. finally подделать не выйдет без дополнительных колдунств и телодвижений.
  2. Система выброса ошибок и их свойства (всплытие, обработка типов (скушал свои ошибки, сформировал красивую табличку с доп. данными, а чужие бросил опять), etc.) не зря существует, её условиями не поймаешь.
  3. Чистота кода, не нужно городить N веток условий, просто бросил ошибку из любого места, а обрабатывай в одном.
  4. Вставь своё.
READ ALSO
Создать слой с данными над html страницей в расширении для Firefox

Создать слой с данными над html страницей в расширении для Firefox

Подскажите, как создать дополнительный слой через расширение для FirefoxТо есть при нажатии на кнопку над текущей страницей должна появляться...

499
Отображение и скрытие данных массива

Отображение и скрытие данных массива

Есть набор маркеров, которые отображаются JS кодом при определенных условияхПри первом нажатии отображаются маркеры выбранного пункта, при...

377