Kasting av unntak i JavaScript

I tidligere leksjoner har vi studert to steder der JavaScript kaster et unntak i tilfelle av problemer.

I ditt prosjekt kan det imidlertid være andre situasjoner som for deg er unntak, men ikke for JavaScript. I så fall kan du opprette og kaste dine egne, brukerdefinerte unntak.

La oss gå gjennom syntaksen som trengs for dette. Først må unntaket opprettes ved hjelp av kommandoen new Error, med unntaksteksten som parameter:

javascriptnew Error('unntakstekst');

Deretter må dette unntaket kastes med kommandoen throw:

javascriptthrow new Error('unntakstekst');

Å kaste et unntak får JavaScript til å anse at en unntakssituasjon har oppstått. Dette betyr at et slikt unntak kan fanges med konstruksjonen try-catch og behandles på ønsket måte.

La oss se på et eksempel på hvordan dette brukes. Anta at vi har en funksjon som deler ett tall på et annet:

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

La oss anta at divisjon med null er forbudt, og at et unntak skal oppstå ved forsøk på å gjøre dette. For å oppnå dette vil vi sjekke i funksjonen om det er et forsøk på å dele på 0. Hvis ikke - deler vi, og hvis ja - kaster vi et unntak:

javascriptfunction div(a, b) {
  if (b !== 0) {
    return a / b;
  } else {
    throw new Error('feil ved divisjon med null');
  }
}

La oss først bare prøve å dele på 0, uten å fange unntaket:

javascriptalert( div(3, 0) );

I dette tilfellet vil skriptkjøringen avbrytes og det vil dukke opp en feil i konsollen med teksten 'feil ved divisjon med null' (sjekk dette). La oss nå fange feilen vår og behandle den på en eller annen måte:

javascripttry {
  alert( div(3, 0) );
} catch (error) {
  alert('du prøver å dele på 0, noe som er forbudt');
}
Задание 1

I JavaScript fører ikke forsøk på å trekke ut kvadratroten av et negativt tall til at det kastes et unntak:

javascriptlet result = Math.sqrt(-1);
console.log(result); // vil skrive ut NaN

Skriv din egen funksjon som skal trekke ut kvadratroten av et tall og samtidig kaste et unntak hvis kvadratroten trekkes ut fra et negativt tall.