Kesalahan pemrograman tidak bisa dihindari. Cepat atau lambat, aplikasi Anda akan mengalami beberapa perilaku yang tidak terduga. Seperti bahasa pemrograman lainnya, JavaScript memunculkan kesalahan saat terjadi kesalahan dalam kode Anda
Kesalahan mengganggu aliran normal aplikasi. Tetapi mereka juga membantu melindungi aplikasi Anda dari perilaku yang tidak dapat diprediksi. Mengetahui cara menangani kesalahan dengan benar sangat penting
Mengapa Penanganan Kesalahan Penting?
Penanganan kesalahan berkontribusi pada pengalaman pengguna yang lebih baik. Anda dapat menukar default JavaScript dan terkadang kesalahan verbose dengan lebih banyak pesan kesalahan yang dapat dibaca manusia. Anda dapat dengan anggun menangani penyebab beberapa kesalahan dan menjaga agar program Anda tetap berjalan daripada menghentikannya
Penanganan kesalahan juga membantu selama pengembangan. Anda dapat menangkap kesalahan runtime dan melakukan sesuatu yang berguna dengannya, seperti memasukkannya ke konsol browser. Ini lebih anggun daripada kesalahan yang menyebabkan crash dan tidak tahu di mana atau mengapa kesalahan itu terjadi
Struktur Kesalahan Bawaan JavaScript
Kesalahan JavaScript adalah objek dengan tiga properti
- nama. Ini adalah nama kesalahan. Misalnya, nama variabel yang hilang akan menimbulkan kesalahan yang disebut SyntaxError
- pesan. Ini adalah isi pesan dan menjelaskan kesalahan secara tekstual
- sebab. Anda dapat menggunakan properti ini dengan kesalahan khusus untuk melacak tumpukan panggilan
Jenis Kesalahan Umum dalam JavaScript
Berikut adalah beberapa kesalahan umum yang ditemukan di JavaScript
Kesalahan sintaks
Kesalahan sintaks dapat terjadi saat JavaScript mencoba menginterpretasikan kode Anda. Ini akan menimbulkan kesalahan jika kode Anda tidak sesuai dengan sintaks yang benar. Beberapa kesalahan umum yang dapat menimbulkan kesalahan sintaks adalah
- Nama variabel tidak ada
- Hilang “}” setelah fungsi
- Hilang ")" setelah kondisi
ReferensiKesalahan
Kesalahan referensi terjadi ketika program mencoba mereferensikan variabel yang tidak tersedia atau di luar cakupan
TypeError
JavaScript dapat melontarkan kesalahan jenis ketika tidak dapat melakukan operasi karena jenis yang diharapkannya berbeda dari yang diterimanya
Kesalahan URI
Kesalahan ini terjadi jika Anda salah menggunakan fungsi penanganan URI global—seperti decodeURIComponent()—. Akibatnya, encoding atau decoding gagal
Kesalahan Agregat
Kesalahan ini digunakan untuk mewakili beberapa kesalahan yang dibungkus menjadi satu. Gunakan saat Anda ingin membuang banyak kesalahan sekaligus. Misalnya, Janji. any() dapat melempar AggregateError() ketika semua janji yang diteruskan ditolak
Kesalahan internal
InternalError dilemparkan ketika kesalahan terjadi di dalam mesin JavaScript
RangeError
Beberapa fungsi menentukan rentang nilai yang dapat Anda berikan sebagai argumen. Kesalahan ini terjadi saat Anda mencoba memberikan nilai yang tidak termasuk dalam rentang tersebut
Penanganan Error Dengan Try. Tangkap Blok
JavaScript menyediakan fungsionalitas penanganan pengecualian bawaan dengan blok try…catch…finally. Ini juga memungkinkan Anda untuk meningkatkan kesalahan Anda sendiri menggunakan operator lemparan
Anda dapat menggunakan blok try…catch untuk menangani kesalahan yang terjadi selama runtime. Anda menulis kode valid yang diharapkan dapat dijalankan dengan benar di blok try. Di blok tangkapan, Anda dapat menulis kode penanganan kesalahan
try {// Valid Javascript code
} catch (error) {
// Handle error
} finally {
// Executed even when an error occurs
}
Blok catch diabaikan jika kode di blok try tidak menimbulkan kesalahan apa pun. Jika muncul error, eksekusi akan melompat ke blok catch. Kode di blok akhirnya berjalan apakah terjadi kesalahan atau tidak. Blok ini tidak wajib, jadi abaikan jika Anda tidak membutuhkannya
Kode yang Anda sertakan dalam blok coba harus valid. Jika tidak, JavaScript akan menimbulkan kesalahan parsing
Mari kita lihat contoh praktisnya
console.log(text)
} catch (error) {
console.log(error.message)
} finally {
console.log("Will be executed regardless")
}
_
Program ini mencoba mencatat nilai dari variabel teks. Karena variabel itu tidak ditentukan, program akan menampilkan kesalahan. Kesalahan ini dicetak pada konsol di blok tangkap. Blok akhirnya kemudian berjalan dan mencetak pesannya sendiri
ReferenceError: text is not definedWill be executed regardless
Dalam situasi di mana Anda perlu meningkatkan kesalahan Anda sendiri, gunakan operator lemparan
Pertimbangkan contoh ini yang menimbulkan kesalahan jika datanya salah
const data = getData()try {
if (!data) {
throw "No data"
}
console.log(data)
// continue
} catch(error) {
console.log(error) // "No data"
}
Dalam contoh ini, program memanggil fungsi getData() dan menugaskan hasilnya ke variabel data. Di blok coba, blok melemparkan kesalahan khusus jika datanya kosong. Blok tangkapan menangkap kesalahan itu dan mencatatnya ke konsol
Melempar kesalahan sangat bermanfaat selama pengembangan. Anda dapat menggunakan pesan kesalahan khusus untuk memahami mengapa aplikasi Anda tidak berfungsi seperti yang diharapkan
Seperti yang ditunjukkan contoh ini, Anda dapat menggunakan string untuk objek kesalahan. Anda sebenarnya dapat membuang ekspresi JavaScript apa pun sebagai kesalahan. Namun, demi konsistensi dengan kesalahan bawaan, gunakan objek JavaScript yang berisi nama dan pesan
throw {name: "Error name",
message: "Error message"
}
_
Anda juga dapat menggunakan konstruktor bawaan JavaScript saat melempar kesalahan. Konstruktor ini antara lain Error, SyntaxError, dan ReferenceError
Untuk menampilkan error menggunakan konstruktor Error, gunakan kode ini
throw new Error("No data")Anda sekarang dapat mereferensikan nama dan pesan
console.log(error.name) // Errorconsole.log(error.message) // No data
_
Memperluas Objek Kesalahan JavaScript
Kelas kesalahan khusus berguna saat menangani kesalahan yang tidak sesuai dengan objek yang sudah disediakan oleh JavaScript. Misalnya, Anda mungkin ingin mengisolasi kesalahan validasi data sebagai tipe khusus yang disebut ValidationError
Anda dapat menggunakan kelas JavaScript ES2015 untuk membuat kelas kesalahan khusus
class ValidationError extends Error {constructor(message) {
super(message);
this.name = "ValidationError";
}
}
Lemparkan kesalahan menggunakan kelas ValidationError seperti ini
throw new ValidationError("Your error message")_
Error yang dilempar akan berupa objek dengan nama dan nilai pesan
{name: "ValidationError",
message: "Your error message"
}
_
Kesalahan Ada untuk Membantu
Penanganan kesalahan adalah bagian mendasar dari pemrograman, bahasa apa pun yang Anda gunakan. JavaScript memiliki dukungan besar untuk menaikkan dan menangkap kesalahan dalam gaya pengecualian. Ini juga memiliki beberapa jenis kesalahan bawaan yang dapat Anda tangani dan gunakan untuk kasus Anda sendiri
Beberapa kesalahan seperti kesalahan sintaks dapat tidak terdeteksi saat Anda menulis JavaScript dalam "mode ceroboh". Menggunakan mode ketat memungkinkan JavaScript untuk menangkap kesalahan yang seharusnya diabaikan