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

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

در این بخش از سری آموزش جاوا اسکریپت قصد داریم به شما نحوه مدیریت خطا در جاوا اسکریپت (error handling) را آموزش بدیم.

 

مدیریت خطا (Error Handling)

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

تعداد از دلایلی که باعث ایجاد خطا می شود می تواند برای مثال :

  • یک مشکل در ارتباط شبکه (شاید اینترنت)
  • ممکن است کاربر یک مقدار نامعتبر را در فیلد فرم وارد کند
  • توابع یا آبجکت های اشاره شده وجود ندارند.
  • داده های نامعتبر به سمت سرور ارسال یا دریافت شده است.
  • یک سرویس که در اپلیکشن خود نیاز دارید موقتا غیرقابل دسترس است.

این انواع خطاهای معروف در هنگام اجرا (runtime) است چرا که در حین اجرای اسکریپت رخ می دهند.

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

 

دستور try…catch

جاوا اسکریپت دستور try-catch را برای به دام انداختن خطاهای run-time و مدیریت آن ها ارایه داده است.

هر کدی که این امکان وجود دارد که باعث ایجاد خطا شود باید در بلاک try قرار بگیرد و کد برای مدیریت این خطا نیز در بخش catch قرار بگیرد.

اگر هر خطایی در بلاک try رخ دهد, اجرای کد سریعا از بلاک try به بلاک catch منتقل می شود.

اگر خطایی در بلاک try وجود نداشته باشد, بلاک catch نادیده گرفته می شود و برنامه بعد از دستور try-catch به اجرای خود ادامه می دهد.

مثال زیر به شما نحوه کار دستور try-catch را نشان می دهد :

اسکریپت بالا یک خطا را در پنجره پیام هشدار alert به جای قرار دادن آن در کنسول را نشان می دهد.

به علاوه, این برنامه حتی با وجود خطا بصورت ناگهانی متوقف نمی شود.

همچنین, توجه کنید که کلمه کلیدی catch به همراه یک شناسه داخل پارانتز است. این شناسه همانند یک پارامتر تابع عمل می کند.

زمانی که یک خطا رخ می دهد, مفسر جاوا اسکریپت یک آبجکت شامل اطلاعاتی درباره آن خطا را ایجاد می کند. این آبجکت به آرگومان در catch برای مدیریت آن پاس داده می شود.

نکته: دستور try-catch یک مکانیزم مدیریت خطا در جاوا اسکریپت است. یک استثنا (exception) سیگنالی است که نشان می دهد که نوعی شرایط استثنایی یا یک خطا (error) حین اجرای برنامه رخ داده است. اصطلاحات “error” خطا یا “exception” معمولا به جای هم دیگر نیز استفاده می شوند.

 

دستور try…catch…finally

دستور try-catch می تواند finally هم داشته باشد. کد داخل finally همیشه اجرا می شود چه خطایی در بلاک try رخ دهد چه رخ ندهد.

مثال زیر به شما همیشه کل زمانی که طول می کشد تا کد اجرا شود را نشان می دهد:

 

پرتاب خطا (Throwing Errors)

همانطور که دیدید مفسر جاوا اسکریپت بصورت خودکار خطایی را هنگام رخ دادن آن ایجاد می کند. به هرحال شما نیز می توانید بصورت دستی با throw یک خطا ایجاد کنید.

فرم کلی (یا سینتکس) دستور throw بصورت throw expression است.

expression می تواند یک شیء یا مقداری از هر نوع داده ای باشد. به هر حال, بهتر است که از آبجکت ها, ترجیحا با خصوصیت name و message باشد.

متد سازنده Error() در جاوا اسکریپت یک راه آسان را برای ساخت یک آبجکت خطا را ارایه داده است.

نکته: اگر از توابع built-in سازنده خطا (مانند Error(), TypeError() و ..) برای ساخت آبجکت های خطا استفاده کنید, پس خصوصیت name مشابه نام متد سازنده است و message نیز برابر آرگومان پاس داده شده به تابع سازنده است.

حالا قصد داریم یک تابع squareRoot() برای پیدا کردن جزر عدد استفاده کنیم. می توانیم این کار را با تابع Math.sqrt() انجام بدیم اما مشکل اینجاست که برای اعداد منفی مقدار NaN را بدون هیچ گونه خطا یا اشاره ای, برگشت می دهد.

قصد داریم این مشکل را با پرتاب یک خطای سفارشی برای اعدادی که منفی هستند حل کنیم.

نکته: از لحاظ تئوری امکان محاسبه جز عدد منفی با اعداد تخیلی i که i2 = -1  می باشد, امکان پذیر است. بنابراین جزر برابر ۲i و جزر برابر برابر ۳i می باشد. اما خب اعداد تخیلی در جاوا اسکریپت پشتیبانی نمی شوند.

 

انواع خطاها

شیء Error یک نوع پایه از همه خطاها است و دارای دو خصوصیت name که نوع خطا را مشخص می کند و خصوصیت message که توضیحی برای اطلاعات بیشتر در مورد خطا است.

هر خطای ایجاد شده می تواند نمونه از شیء Error باشد.

چتدین نوع خطای مختلف می توانید هنگام اجرای برنامه جاوا اسکریپت مثل RangeError, ReferenceError, SyntaxError, TypeError, URIError ایجاد شود.

بخش زیر هر یک از این خطا ها را با جزییات شرح می دهد.

 

RangeError

یک RangeError زمانی که از عددی خارج از محدوده قابل قبول استفاده کنید, رخ می دهد.

برای مثال, ساخت یک آرایه با طور منفی خطای RangeError را پرتاب می کند.

 

ReferenceError

یک ReferenceError معمولا زمانی که قصد دسترسی به یک رفرنس یا متغیر یا شیء ای که وجود ندارد, دارید, رخ می دهد.

 

SyntaxError

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

مثلا اگر براکت را نبندید, ساختار حلقه ها به درستی مشخص نشود و …

 

TypeError

یک TypeError زمانی که یک مقدار, نوع مورد انتظار نیست, پرتاب می شود. برای مثال, صدا زدن یک متد رشته روی عدد, صدا زدن یک متد آرایه روی رشته و …

 

URIError

یک URIError زمانی که مقدار URL یا آدرس مربوط به توابع encodeURI() یا decodeURI() نامعتبر باشد, رخ می دهد.

نکته: یک نوع خطای دیگر به نام EvalError نیز وجود دارد که هنگام وجود خطا در اجرای کد با تابع eval() رخ می دهد. اما, این خطا دیگر توسط جاوا اسکریپت پرتاب یا throw نمی شود. به هرحال این شیء همچنان برای سازگاری عقب مانده است.

نوع خطای مشخصی را نیز هنگام استفاده از دستور throw می توانید بصورت دستی مشخص کنید.

برای پرتاب یک TypeError می توانید از متد سازنده TypeError() مثل زیر استفاده کنید:

نکته: آبجکت Error همچنین خصوصیات غیراستاندارد را پشتیبانی می کند. یکی از پر استفاده ترین خصوصیات stack است که یک stack trace را برای خطا برگشت می دهد. می توانید از آن برای هدف دیباگ کردن استفاده کنید اما برای پروژه نهایی روی سایت از آن بهره نبرید.

 

امیدواریم در این بخش آموزش جاوا اسکریپت, از آموزش مدیریت خطا در جاوا اسکریپت نهایت استفاده را برده باشد.

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

موفق باشید.

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۲)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. آرش ۲۶ آبان ۱۳۹۹

    با سلام وقت بخیر
    برای جلوگیری از ورود اعداد در فیلد ورودی از چه دستوری باید استفاده کرد لطفا راهنمایی کنید

    پاسخ
    1. حسن شفیعی ۲۶ آبان ۱۳۹۹

      سلام ممنون
      لطفا آموزش اعتبارسنجی فرم در جاوااسکریپت رو مطالعه کنید
      موفق باشید.

      پاسخ
دوره های آموزشی