آموزش جاوا اسکریپت

آموزش جاوا اسکریپت - مدیریت خطا

سه نوع خطا (error) در برنامه نویسی وجود دارد:  (a) خطاهای دستور نگارش (Syntax Errors)، (b) خطاهای زمان اجرا(Runtime Errors)، و (c) خطاهای منطقی(Logical Errors).

دستور نگارش (syntax)

دستور نگارش (syntax) همچنین با عنوان خطاهای parsing نیز نامیده می شوند که در زمان کامپایل در زبان های برنامه نویسی سنتی و در زمان تفسیر در جاوا اسکریپت رخ می دهد.

به عنوان مثال، خط زیر یک خطای دستور نگارش را ایجاد می کند زیرا یک پرانتز بسته می باشد.

<script type="text/javascript">
   <!--
      window.print(;
   //-->
</script>

هنگامی که یک خطای دستور نگارش در جاوا اسکریپت اتفاق می افتد، تنها کد موجود در همان موضوع به عنوان خطای دستور نگارش تحت تاثیر قرار می گیرد و بقیه کد در سایر موضوعات اجرا شده و فرض می شود هیچ چیزی در آنها بستگی به کد حاوی خطا ندارد.

خطاهای زمان اجرا

خطاهای زمان اجرا همچنین با عنوان exceptions نیزنامیده می شود که در زمان اجرا (بعد از compilation / interpretation) رخ می دهد.

برای مثال، خط زیر یک خطای زمان اجرا را ایجاد می کند زیرا در اینجا دستور نگارش درست است، اما در زمان اجرا، سعی در فراخوانی یک متد وجود ندارد.

<script type="text/javascript">
   <!--
      window.printme();
   //-->
</script>

Exceptionها همچنین موضوعی را که در آن رخ می دهند تحت تأثیر می قرار می دهند و به دیگر موضوعات جاوا اسکریپت اجازه می دهد تا اجرای نرمال ادامه یابد.

 

خطاهای منطقی

خطاهای منطقی می توانند سخت ترین نوع خطاها برای ردیابی باشند. این اشتباهات نتیجه یک خطای دستور نگارش یا زمان اجرا نمی باشد و در عوض، زمانی رخ می دهند که شما اشتباهی در منطق های اسکریپت که در اختیار شما گذاشته شده انجام داده اید و نتیجه ای را که انتظار دارید دریافت نکرده اید.

شما نمی توانید این خطاها را پیدا کنید، زیرا نوع منطقی که می خواهید در برنامه خود قرار دهید به شرایط کسب و کار شما بستگی دارد.

 

دستور   try...catch...finally

آخرین نسخه های جاوا اسکریپت قابلیت های استثنایی را اضافه می کنند. جاوا اسکریپت سازنده try...catch...finally را مانند عملگر throw جهت مدیریت exceptionها  پیاده سازی می کند.

شما می توانید از exceptionها زمان اجرا (runtime) و تولیدات برنامه نویس را catch کنید، اما نمی توانید خطاهای دستور نگارش جاوا اسکریپت را بدست آورید.

در زیر دستور نگارش بلوک try...catch...finally قرار دارد.

<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 یا یک بلوک finally (یا یکی از هر دو) باشد. زمانی که   exceptionدر بلوکtry  رخ می دهد، exceptionدر e قرار می گیرد و بلوک catch  اجرا می شود. بلوک اختیاری finally پس از try/catch بدون محدودیت اجرا می شود.

 

مثال ها

 ما در تلاش برای فراخوانی یک تابع غیر موجود هستیم که به نوبه خود باعث افزایش exception می شود. مثال زیر رفتار آن را بدون try/catch نشان می دهد.

<html>
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               alert("مقدار این متغیر برابر است با : " + a );
            }
         //-->
      </script>
   </head>
   
   <body>
      <p>با کلیک بر روی قسمت زیر می توانید نتیجه را مشاهده کنید:</p>
      
      <form>
         <input type="button" value="کلیک کنید" onclick="myFunc();" />
      </form>
      
   </body>
</html>

خروجی

 

می توانید از بلوک finally  پس از try/catch بدون قید و شرط اجرا کنید.

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               try {
                  alert("مقدار متغیر برابر است با : " + a );
               } 
               
               catch ( e ) {
                  alert("خطا: " + e.description );
               }
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>کلیک کنید تا نتیجه را مشاهده کنید:</p>
      
      <form>
         <input type="button" value="کلیک کنید" onclick="myFunc();" />
      </form>
      
   </body>
</html>

خروجی

 

دستور throw

شما می توانید از دستور throw برای افزایش exception ها ساخته شده یا exception های سفارشی خود استفاده نمایید. بعدها این exception ها می توانند دستگیر شوند و شما می توانید اقدام مناسب را انجام دهید.

 

مثال

مثال زیر نحوه استفاده دستور throw را نشان می دهد.

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            function myFunc()
            {
               var a = 100;
               var b = 0;
               
               try{
                  if ( b == 0 ){
                     throw( "خطای تقسیم بر صفر." ); 
                  }
                  
                  else
                  {
                     var c = a / b;
                  }
               }
               
               catch ( e ) {
                  alert("خطا: " + e );
               }
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>کلیک کنید تا نتیجه را مشاهده کنید:</p>
      
      <form>
         <input type="button" value="کلیک کنید" onclick="myFunc();" />
      </form>
      
   </body>
</html>

خروجی

شما می توانید را در تابع یک exception را با استفاده از یک رشته، عدد صحیح، بولین یا یک شیء افزایش دهید و سپس می توانید این یک exception را در همان عملکردی که قبلا در بالا انجام دادید یا در یک تابع دیگر با استفاده از یک بلوک try ... catch بدست آوریم.

متد onerror()

رویداد مدیریتی onerror اولین ویژگی مدیریت خطا در جاوا اسکریپت است. رویداد error به هنگام وقوع  exception در صفحه بر روی window object (شیء پنجره) رخ می دهد.

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            window.onerror = function () {
               alert("خطایی رخ داده است.");
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>لطفا کلیک کنید تا نتیجه را مشاهده کنید:</p>
      
      <form>
         <input type="button" value="کلیک کنید" onclick="myFunc();" />
      </form>
      
   </body>
</html>

خروجی

رویداد مدیریتی onerror سه بخش از اطلاعات را برای شناسایی ذات واقعی خطا ارائه می دهد:

  • Error message: همان پیامی است که مرورگر برای خطای داده شده نمایش می دهد.
  • URL: فایلی که خطا در آن رخ داده است.
  • Line number: شماره خط در URL داده شده که باعث خطا شده است.

 

مثال

<html>
   
   <head>
      
      <script type="text/javascript">
         <!--
            window.onerror = function (msg, url, line) {
               alert("پیغام : " + msg );
               alert("آدرس url : " + url );
               alert("شماره خط : " + line );
            }
         //-->
      </script>
      
   </head>
   
   <body>
      <p>لطفا کلیک کنید تا نتیجه را مشاهده نمایید:</p>
      
      <form>
         <input type="button" value="کلیک کنید" onclick="myFunc();" />
      </form>
      
   </body>
</html>

خروجی

شما می توانید اطلاعات استخراج شده را به هر نحو که فکر می کنید بهتر است نمایش دهید.

می توانید از متد onerror برای نمایش پیام خطا در موردی که مشکلی برای لود تصویر وجود دارد، استفاده نمایید.

<img src="myimage.gif" onerror="alert('خطایی در هنگام فراخوانی تصویر رخ داده است.')" />

همچنین می توانید onerror را با بسیاری از تگ های HTML جهت نمایش پیام در زمان خطا استفاده کنید.

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش جاوا اسکریپت

Learn JavaScript

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

سوال شما با موفقیت ثبت شد. برای اینکه بتوانیم به شما اطلاع رسانی کنیم، موارد زیر را وارد کنید:

لطفا چند لحظه منتظر بمانید ...