Бацање изузетака у ЈаваСкрипту

У претходним лекцијама смо проучили два места на којима ЈаваСкрипт баца изузетак у случају неких проблема.

У вашем пројекту, међутим, могу постојати друге ситуације које су за вас изузетне, али за ЈаваСкрипт нису. У том случају ми можемо креирати и бацати сопствене, корисничке изузетке.

Хајде да погледамо синтаксу потребну за то. За почетак изузетак треба креирати помоћу команде new Error, прослеђујући текст изузетка као параметар:

javascriptnew Error('текст изузетка');

Затим тај изузетак треба да се баци помоћу команде throw:

javascriptthrow new Error('текст изузетка');

Бацање изузетка наводи ЈаваСкрипт да сматра да се догодила изузетна ситуација. То значи да се такав изузетак може ухватити помоћу конструкције try-catch и обрадити на одговарајући начин.

Погледајмо на примеру како се то користи. Рецимо да имамо функцију која дели један број другим:

javascriptfunction div(a, b) {
  return a / b;
}

Рецимо да сматрамо да је дељење нулом забрањено и да при покушају да се то уради треба да настане изузетна ситуација. Зато ћемо проверити у функцији, да ли постоји покушај дељења са 0. Ако не - делићемо, а ако постоји - бацаћемо изузетак:

javascriptfunction div(a, b) {
  if (b !== 0) {
    return a / b;
  } else {
    throw new Error('грешка при дељењу нулом');
  }
}

Хајде прво да једноставно покушамо да поделимо са 0, без хватања изузетка:

javascriptalert( div(3, 0) );

У том случају ће се извршавање скрипте прекинути и у конзоли ће се појавити грешка са текстом 'грешка при дељењу нулом' (проверите). Хајде сада да ухватимо нашу грешку и некако је обрадимо:

javascripttry {
  alert( div(3, 0) );
} catch (error) {
  alert('покушавате да делите са 0, што је забрањено');
}
Задание 1

У ЈаваСкрипту покушај извлачења квадратног корена из негативног броја не доводи до бацања изузетка:

javascriptlet result = Math.sqrt(-1);
console.log(result); // приказаће NaN

Напишите сопствену функцију која ће извлачити квадратни корен из броја и притом бацати изузетак, ако се корен извлачи из негативног броја.