آموزش مدیریت خطاها و استثناها در جاوا اسکریپت
آموزش مدیریت خطاها و استثناها در جاوا اسکریپت
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش مدیریت خطاها و استثناها در جاوا اسکریپت خواهیم پرداخت.
در برنامه نویسی سه نوع خطا وجود دارد: (الف) خطاهای نحوی ، (ب) خطاهای زمان اجرا ، و (ج) خطاهای منطقی.
خطاهای نحوی
خطاهای نحوی که خطاهای تجزیه نیز نامیده می شوند ، در زمان کامپایل در زبانهای برنامه نویسی سنتی و در زمان تفسیر در جاوا اسکریپت رخ می دهد.
به عنوان مثال، خط زیر باعث خطای نحوی می شود زیرا در پرانتز بسته نمی شود.
1 2 3 4 5 |
<script type = "text/javascript"> <!-- window.print(; //--> </script> |
هنگامی که یک خطای نحوی در جاوا اسکریپت رخ می دهد ، فقط کدی که در همان موضوع خطای نحوی قرار دارد تحت تأثیر قرار می گیرد و بقیه کد در سایر موضوعات اجرا می شود با این فرض که هیچ چیز در آنها به کد حاوی خطا بستگی ندارد.
خطاهای زمان اجرا
خطاهای زمان اجرا که به آنها استثنا نیز گفته می شود ، در حین اجرا (پس از تدوین / تفسیر) رخ می دهد.
به عنوان مثال، خط زیر باعث خطای زمان اجرا می شود زیرا در اینجا نحو صحیح است ، اما در زمان اجرا سعی دارد روشی را فراخوانی کند که وجود ندارد.
1 2 3 4 |
<script type = "text/javascript"> <!-- window.printme(); //--></script> |
موارد استثنائی همچنین بر موضوعی که در آن رخ می دهد تأثیر می گذارد و به سایر رشته های جاوا اسکریپت امکان ادامه اجرای طبیعی را می دهد.
خطاهای منطقی در جاوا اسکریپت
خطاهای منطقی می توانند دشوارترین نوع خطاها برای ردیابی باشند. این خطاها نتیجه خطای نحوی یا زمان اجرا نیستند. در عوض، زمانی رخ می دهد که شما در منطقی که اسکریپت شما را هدایت می کند اشتباه کنید و نتیجه مورد انتظار خود را نگیرید.
شما نمی توانید این خطاها را بگیرید ، زیرا این به نوع تجارت شما بستگی دارد که می خواهید چه نوع منطقی را در برنامه خود وارد کنید.
دستور try…catch…finally
جدیدترین نسخه های جاوا اسکریپت قابلیت های استثنایی را مدیریت می کنند. جاوا اسکریپت در نهایت ساختار try…catch…finally و همچنین عملگر throw را برای مدیریت موارد استثنایی پیاده سازی می کند.
شما می توانید استثناهای تولید شده توسط برنامه نویس و زمان اجرا را بگیرید ، اما نمی توانید خطاهای نحوی جاوا اسکریپت را بگیرید.
در اینجا سعی کنید … گرفتن … بالاخره نحو مسدود کردن –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<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> |
بلوک try باید دقیقاً توسط یک بلوک catch یا یکی در نهایت block (یا یکی از هر دو) دنبال شود. وقتی یک استثنا در بلوک try رخ می دهد ، استثنا در e قرار می گیرد و بلوک catch اجرا می شود. در نهایت بلوک اختیاری پس از try / catch بدون قید و شرط اجرا می شود.
مثال ها
در اینجا مثالی آورده شده است که در آن سعی می کنیم یک تابع موجود را فراخوانی کنیم که به نوبه خود باعث ایجاد یک استثنا می شود. بیایید ببینیم چگونه رفتار می کند بدون اینکه تلاش کند …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<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> |
حال اجازه دهید سعی کنیم این استثنا را با استفاده از try … catch و نمایش یک پیام کاربر پسند ، امتحان کنیم. اگر می خواهید این خطا را از کاربر پنهان کنید ، می توانید این پیام را سرکوب کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<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> |
در آخر می توانید از بلوکی استفاده کنید که همیشه پس از try / catch بدون قید و شرط اجرا می شود. به عنوان مثال.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<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> |
دستور throw
برای بالا بردن استثناهای داخلی یا استثناهای سفارشی خود می توانید از دستور throw استفاده کنید. بعداً می توان این استثنائات را گرفت و شما می توانید اقدام مناسبی انجام دهید.
مثال
مثال زیر نحوه استفاده از دستور throw را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<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> |
با استفاده از یک رشته، عدد صحیح، Boolean یا یک شی می توانید یک استثنا را در یک تابع افزایش دهید و سپس می توانید آن استثنا را یا در همان عملکردی که در بالا انجام دادیم ، یا در تابع دیگری با استفاده از بلوک try … catch ثبت کنید.
روش ()onerror
کنترل کننده رویداد onerror اولین ویژگی تسهیل کار با خطا در JavaScript بود. هر زمان که استثنایی در صفحه رخ دهد، رویداد خطا بر روی شی پنجره شلیک می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<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> |
کنترل کننده رویداد onerror برای شناسایی ماهیت دقیق خطا ، سه قسمت از اطلاعات را ارائه می دهد –
- Error message– همان پیامی که مرورگر برای خطای داده شده نمایش می دهد
- URL – فایلی که خطا در آن رخ داده است
- Line number− شماره خط در URL داده شده که باعث خطا شده است
در اینجا مثالی برای نشان دادن نحوه استخراج این اطلاعات آورده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<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> |
شما می توانید اطلاعات استخراج شده را به هر روشی که فکر می کنید بهتر است نمایش دهید.
همانطور که در زیر نشان داده شده است ، برای نمایش پیام خطا در صورت بروز هرگونه مشکل در بارگذاری تصویر ، می توانید از یک روش خطا استفاده کنید.
1 |
<img src="myimage.gif" onerror="alert('An error occurred loading the image.')" /> |
می توانید از خطا با بسیاری از برچسب های HTML برای نمایش پیام های مناسب در صورت بروز خطا استفاده کنید.
لیست جلسات قبل آموزش جاوا اسکریپت
-
- آموزش جاوا اسکریپت
- نگاه کلی به آموزش جاوا اسکریپت
- آموزش نحو در جاوا اسکریپت
- آموزش فعال کردن جاوا اسکریپت در مرورگرها
- آموزش قرارگیری در فایل HTML در جاوا اسکریپت
- آموزش متغیرها در جاوا اسکریپت
- آموزش عملگرها در جاوا اسکریپت
- آموزش دستور if-else در جاوا اسکریپت
- آموزش دستور switch case در جاوا اسکریپت
- آموزش حلقه while در جاوا اسکریپت
- آموزش حلقه for در جاوا اسکریپت
- آموزش حلقه for…in در جاوا اسکریپت
- آموزش کنترل حلقه در جاوا اسکریپت
- آموزش توابع در جاوا اسکریپت
- آموزش رویدادها در جاوا اسکریپت
- آموزش کوکی ها در جاوا اسکریپت
- آموزش تغییر مسیر صفحه در جاوا اسکریپت
- آموزش کادر گفتگو در جاوا اسکریپت
- آموزش کلمه کلیدی Void در جاوا اسکریپت
- آموزش چاپ صفحه در جاوا اسکریپت
- بررسی اجمالی اشیا در جاوا اسکریپت
- آموزش شی Number در جاوا اسکریپ
- آموزش شی Boolean در جاوا اسکریپت
- آموزش شی رشته ها در جاوا اسکریپت
- آموزش شی آرایه ها در جاوا اسکریپت
- آموزش شی Date در جاوا اسکریپت
- آموزش شی Math در جاوا اسکریپت
- آموزش عبارات منظم و شی RegExp در جاوا اسکریپت
- آموزش مدل شی Document یا DOM در جاوا اسکریپت
دیدگاه شما