Rumah >hujung hadapan web >tutorial js >Penjelasan terperinci tentang kaedah pengendalian pengecualian dalam pengetahuan JavaScript_Basic
Terdapat tiga jenis ralat pengaturcaraan: (1) Ralat sintaks dan (2) Ralat masa jalan (3) Ralat logik:
Ralat sintaks:
Ralat sintaks, juga dikenali sebagai ralat penghuraian, berlaku apabila menyusun bahasa pengaturcaraan tradisional dan muncul apabila JavaScript ditafsirkan.
Sebagai contoh, baris berikut akan menyebabkan ralat sintaks kerana tiada kurungan penutup:
<script type="text/javascript"> <!-- window.print(; //--> </script>
Apabila ralat sintaks berlaku dalam JavaScript, hanya ralat sintaks yang terkandung dalam urutan yang sama terjejas dan kod dalam urutan lain dilaksanakan;
Ralat masa jalan:
Pelaksanaan (selepas penyusunan/tafsiran) pada ralat masa jalan, juga dikenali sebagai pengecualian, dinaikkan.
Sebagai contoh, baris berikut akan menyebabkan ralat masa jalan kerana sintaks di sini betul, tetapi pada masa jalan ia cuba memanggil kaedah yang tidak wujud:
<script type="text/javascript"> <!-- window.printme(); //--> </script>
Pengecualian juga mempengaruhi urutan yang ia berlaku, membenarkan urutan JavaScript lain untuk terus melaksanakan seperti biasa.
Ralat logik:
Ralat logik mungkin merupakan jenis ralat yang paling sukar untuk dikesan. Ralat ini bukan hasil daripada sintaks atau ralat masa jalan. Sebaliknya, apabila pepijat berlaku memandu logik skrip, anda tidak mendapat hasil yang diharapkan.
Anda mungkin tidak dapat menangkap ralat ini kerana ia bergantung pada program jenis logiknya berdasarkan keperluan perniagaan.
cuba...tangkap...akhirnya kenyataan:
Keupayaan pengendalian pengecualian ditambah dalam versi terkini JavaScript. JavaScript melaksanakan cuba...tangkap...akhirnya struktur dan operasi buang untuk mengendalikan pengecualian.
Anda boleh menangkap pengecualian yang dijana pengaturcara dan masa jalan, tetapi bukan ralat sintaks JavaScript.
Inilah percubaan...tangkap...akhirnya sekat sintaks:
<script type="text/javascript"> <!-- try { // Code to run [break;] } catch ( e ) { // Code to run if an exception occurs [break;] }[ finally { // Code that is always executed regardless of // an exception occurring }] //--> </script>
Blok cuba mesti diikuti oleh blok tangkapan sahaja atau blok akhirnya (atau sama ada). Apabila pengecualian berlaku dalam blok cuba, pengecualian diletakkan dalam e dan blok tangkapan dilaksanakan. Pilihan akhirnya menyekat selepas pernyataan cuba/tangkap dilaksanakan tanpa syarat.
Contoh:
Di bawah ialah contoh di mana kami cuba memanggil fungsi yang tidak wujud yang akan membuang pengecualian. Mari lihat bagaimana ia berkelakuan, tanpa mencuba...tangkap:
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; alert("Value of variable a is : " + a ); } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Sekarang, mari kita cuba menangkap pengecualian ini menggunakan cuba ... tangkap dan paparkan mesej mesra pengguna. Anda juga boleh menyekat mesej ini jika anda ingin menyembunyikan ralat ini daripada pengguna.
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; try { alert("Value of variable a is : " + a ); } catch ( e ) { alert("Error: " + e.description ); } } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Anda boleh menggunakan blok akhirnya untuk melaksanakan tanpa syarat selama-lamanya selepas pernyataan cuba/tangkap. Berikut ialah contoh:
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; try { alert("Value of variable a is : " + a ); }catch ( e ) { alert("Error: " + e.description ); }finally { alert("Finally block will always execute!" ); } } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
kenyataan lontaran:
Anda boleh menggunakan pernyataan lontaran untuk meningkatkan pengecualian terbina dalam atau pengecualian tersuai anda. Kemudian pengecualian ini boleh ditangkap dan tindakan sewajarnya boleh diambil.
Berikut ialah contoh penggunaan pernyataan lontaran.
<html> <head> <script type="text/javascript"> <!-- function myFunc() { var a = 100; var b = 0; try{ if ( b == 0 ){ throw( "Divide by zero error." ); }else{ var c = a / b; } }catch ( e ) { alert("Error: " + e ); } } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Anda boleh menggunakan rentetan, integer, boolean atau objek untuk membuang pengecualian dalam fungsi, kemudian anda boleh menangkap pengecualian dalam fungsi yang sama yang kami lakukan di atas, atau gunakan percubaan...catch block dalam fungsi lain.
sintaks onerror()
Pengendali acara onerror ialah ciri pertama, yang memudahkan JavaScript mengendalikan ralat. Peristiwa ralat dicetuskan pada objek tetingkap apabila pengecualian berlaku pada halaman. Contohnya:
<html> <head> <script type="text/javascript"> <!-- window.onerror = function () { alert("An error occurred."); } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Pengendali acara onerror menyediakan tiga maklumat untuk mengetahui sifat sebenar ralat:
<html> <head> <script type="text/javascript"> <!-- window.onerror = function (msg, url, line) { alert("Message : " + msg ); alert("url : " + url ); alert("Line number : " + line ); } //--> </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type="button" value="Click Me" onclick="myFunc();" /> </form> </body> </html>
Anda boleh menggunakan kaedah onError untuk memaparkan mesej ralat tanpa sebarang masalah dalam memuatkan imej seperti berikut:
<img src="myimage.gif" onerror="alert('An error occurred loading the image.')" />