Melontarkan Pengecualian dalam JavaScript
Pertimbangkan blok catch untuk tugas dengan JSON produk:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON produk tidak sah');
} else if (error.name == 'ProductCostError') {
alert('Produk tiada harga atau kuantiti');
}
}
Seperti yang anda lihat, kami menangkap dua pengecualian
yang dirancang oleh kami dan bertindak balas terhadapnya.
Tetapi apa yang akan berlaku jika pengecualian jenis lain
yang tidak kami jangkakan berlaku? Dalam kes ini,
ia juga akan masuk ke dalam blok catch, tetapi
tidak akan ada sebarang tindak balas kerana
pengecualian dengan jenis lain tidak akan memenuhi
mana-mana syarat 'if' kami.
Apabila saya katakan tidak akan ada sebarang tindak balas, saya maksudkan benar-benar tiada: malah ralat tidak akan dipaparkan di konsol. Kod kami akan gagal berfungsi dalam senyap.
Oleh itu, terdapat peraturan berikut: kod anda
hendaklah menangkap hanya pengecualian yang
diketahui cara mengatasinya. Jika pengecualian itu
tidak diketahui, maka ia perlu dilontarkan
seterusnya menggunakan throw. Dalam kes ini,
pengecualian tersebut akan ditangkap oleh entiti yang
lebih mengetahui di atas atau pengecualian akan
menyebabkan ralat di konsol.
Mari betulkan kod kami:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON produk tidak sah');
} else if (error.name == 'ProductCostError') {
alert('Produk tiada harga atau kuantiti');
} else {
throw error; // lontar pengecualian seterusnya
}
}
Diberi kod berikut:
try {
let arr = JSON.parse(json);
for (let i = 0; i < arr.length; i++) {
localStorage.setItem(i, arr[i]);
}
} catch (error) {
if (error.name == 'QuotaExceededError') {
alert('ruang storan habis');
}
if (error.name == 'SyntaxError') {
alert('JSON tidak sah');
}
}
Apakah masalah dengan kod ini? Betulkannya kepada versi yang lebih baik.