Melemparkan Pengecualian di JavaScript

Dalam pelajaran sebelumnya, kita telah mempelajari dua tempat di mana JavaScript melemparkan pengecualian jika terjadi masalah.

Namun, dalam proyek Anda, mungkin ada situasi lain yang bagi Anda merupakan pengecualian, tetapi bagi JavaScript bukan. Dalam hal ini, kita dapat membuat dan melemparkan pengecualian kita sendiri (custom exceptions).

Mari kita bahas sintaks yang diperlukan untuk melakukannya. Pertama, pengecualian perlu dibuat dengan perintah new Error, dengan meneruskan teks pengecualian sebagai parameternya:

javascriptnew Error('teks pengecualian');

Kemudian pengecualian ini perlu dilemparkan dengan perintah throw:

javascriptthrow new Error('teks pengecualian');

Melemparkan pengecualian memaksa JavaScript menganggap bahwa situasi yang luar biasa telah terjadi. Ini berarti pengecualian seperti itu dapat ditangkap dengan konstruksi try-catch dan diolah dengan cara yang diinginkan.

Mari kita lihat contoh bagaimana menggunakan ini. Misalkan kita memiliki fungsi yang membagi satu angka dengan angka lainnya:

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

Mari kita anggap bahwa pembagian dengan nol dilarang dan upaya untuk melakukannya harus menyebabkan situasi pengecualian. Untuk itu, kita akan memeriksa dalam fungsi, apakah ada upaya membagi dengan 0. Jika tidak - kita akan membagi, dan jika ya - kita akan melemparkan pengecualian:

javascriptfunction div(a, b) {
  if (b !== 0) {
    return a / b;
  } else {
    throw new Error('kesalahan pembagian dengan nol');
  }
}

Pertama-tama, mari kita coba membagi dengan 0, tanpa menangkap pengecualian:

javascriptalert( div(3, 0) );

Dalam hal ini, eksekusi skrip akan terputus dan di konsol akan muncul error dengan teks 'kesalahan pembagian dengan nol' (cobalah). Sekarang mari kita tangkap error kita dan olah dengan cara tertentu:

javascripttry {
  alert( div(3, 0) );
} catch (error) {
  alert('Anda mencoba membagi dengan 0, yang dilarang');
}
Задание 1

Dalam JavaScript, upaya mengambil akar kuadrat dari angka negatif tidak menyebabkan pelemparan pengecualian:

javascriptlet result = Math.sqrt(-1);
console.log(result); // akan menampilkan NaN

Tulis fungsi Anda sendiri yang akan mengambil akar kuadrat dari sebuah angka dan pada saat yang sama melemparkan pengecualian, jika akar diambil dari angka negatif.