⊗jsSpExcPrb 150 of 294 menu

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.

kauzlbydehy