Истисно кардани истисноҳо дар 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-ро ба намоиш мегузорад

Функсияи худро нависед, ки решаи як ададро гирад ва дар ҳамон ҳол истисно партояд, агар реша аз адади манфӣ гирифта шавад.