Хвърляне на изключения в JavaScript
В предишните уроци научихме за две места, в които JavaScript хвърля изключение при проблеми.
Във вашия проект обаче може да има други ситуации, които за вас са изключителни, но за JavaScript - не. В такъв случай можете да създавате и хвърляте свои собствени изключения.
Нека разгледаме синтаксиса, необходим за
това. Първо трябва да създадете изключение
с помощта на командата new Error, като
предадете текста на изключението като параметър:
new Error('текст на изключението');
След това това изключение трябва да се хвърли с помощта
на командата throw:
throw new Error('текст на изключението');
Хвърлянето на изключение кара JavaScript
да счита, че е възникнала изключителна ситуация.
Това означава, че такова изключение може да бъде уловено
с помощта на конструкцията try-catch и
обработено по подходящ начин.
Нека видим на пример как да използваме това. Да предположим, че имаме функция, която дели едно число на друго:
function div(a, b) {
return a / b;
}
Нека приемем, че делението на нула
е забранено и при опит за това трябва
да възникне изключителна ситуация. За това
ще проверим във функцията дали няма опит
за деление на 0. Ако няма - ще разделим,
а ако има - ще хвърлим изключение:
function div(a, b) {
if (b !== 0) {
return a / b;
} else {
throw new Error('грешка при деление на нула');
}
}
Нека първо просто опитаме да разделим
на 0, без да улавяме изключението:
alert( div(3, 0) );
В този случай изпълнението на скрипта ще бъде прекъснато
и в конзолата ще се появи грешка с текста 'грешка
при деление на нула' (проверете). Нека
сега да улавяме нашата грешка и
да я обработваме по някакъв начин:
try {
alert( div(3, 0) );
} catch (error) {
alert('опитвате се да делите на 0, което е забранено');
}
В JavaScript опитът за извличане на корен от отрицателно число не води до хвърляне на изключение:
let result = Math.sqrt(-1);
console.log(result); // ще изведе NaN
Напишете своя собствена функция, която ще извлича корен от число и при това ще хвърля изключение, ако корен се извлича от отрицателно число.