Хвърляне на изключения в JavaScript

В предишните уроци научихме за две места, в които JavaScript хвърля изключение при проблеми.

Във вашия проект обаче може да има други ситуации, които за вас са изключителни, но за JavaScript - не. В такъв случай можете да създавате и хвърляте свои собствени изключения.

Нека разгледаме синтаксиса, необходим за това. Първо трябва да създадете изключение с помощта на командата new Error, като предадете текста на изключението като параметър:

javascriptnew Error('текст на изключението');

След това това изключение трябва да се хвърли с помощта на командата throw:

javascriptthrow new Error('текст на изключението');

Хвърлянето на изключение кара JavaScript да счита, че е възникнала изключителна ситуация. Това означава, че такова изключение може да бъде уловено с помощта на конструкцията 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

В JavaScript опитът за извличане на корен от отрицателно число не води до хвърляне на изключение:

javascriptlet result = Math.sqrt(-1);
console.log(result); // ще изведе NaN

Напишете своя собствена функция, която ще извлича корен от число и при това ще хвърля изключение, ако корен се извлича от отрицателно число.