⊗jsSpExcThr 145 of 294 menu

Выкідванне выключэнняў у 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

Напішыце сваю функцыю, якая будзе здымаць корань з ліку і пры гэтым выкідваць выключэнне, калі корань здымаецца з адмоўнага ліку.

idhikadept