همه چیز دچار خطا می شود. این یک واقعیت زندگی است و برنامه نویسی قطعا از این قاعده مستثنی نیست. اما با آینده نگری دقیق، می توانید از قبل برنامه ریزی کنید و از فاجعه جلوگیری کنید.
خطاهای برنامه نویسی اجتناب ناپذیر است. دیر یا زود، برنامه شما رفتار غیرمنتظره ای را تجربه خواهد کرد. مانند هر زبان برنامه نویسی دیگری، جاوا اسکریپت هنگامی که مشکلی در کد شما پیش می آید، خطاهایی را ایجاد می کند.
خطاها جریان عادی یک برنامه را مختل می کنند. اما آنها همچنین به محافظت از برنامه شما در برابر رفتار غیرقابل پیش بینی کمک می کنند. دانستن نحوه برخورد صحیح با خطاها بسیار مهم است.
چرا رسیدگی به خطا مهم است؟
مدیریت خطا به بهبود تجربه کاربری کمک می کند. میتوانید خطاهای پیشفرض جاوا اسکریپت و گاهی اوقات پرمخاطب را با پیامهای خطای بیشتر قابل خواندن توسط خودتان جایگزین کنید. شما میتوانید بهخوبی دلایل برخی از خطاها را مدیریت کنید و برنامهتان را به جای اینکه آن را ترک کنید، در حال اجرا نگه دارید.
مدیریت خطا نیز در طول توسعه مفید است. میتوانید خطای زمان اجرا را دریافت کنید و با آن کار مفیدی انجام دهید، مانند ورود آن به کنسول مرورگر. این بهتر از خطای ایجاد تصادف و ندانستن محل یا دلیل وقوع خطا است.
ساختار خطاهای جاوا اسکریپت داخلی
خطاهای جاوا اسکریپت اشیایی با سه ویژگی هستند:
- name: این نام خطا است. به عنوان مثال، یک نام متغیر از دست رفته، خطایی به نام SyntaxError ایجاد می کند.
- پیام: این متن پیام است و خطا را به صورت متنی توضیح می دهد.
- علت: می توانید از این ویژگی با خطاهای سفارشی برای پیگیری پشته تماس استفاده کنید.
انواع رایج خطا در جاوا اسکریپت
در اینجا برخی از خطاهای رایج در جاوا اسکریپت وجود دارد.
اشتباه نوشتاری
هنگامی که جاوا اسکریپت سعی می کند کد شما را تفسیر کند، خطاهای نحوی ممکن است رخ دهد. اگر کد شما با نحو صحیح مطابقت نداشته باشد، خطا ایجاد می کند. برخی از خطاهای رایجی که می توانند باعث ایجاد خطاهای نحوی شوند عبارتند از:
نام متغیر وجود ندارد.
«}» بعد از یک تابع وجود ندارد.
«)» بعد از یک شرط وجود ندارد.
ReferenceError
خطاهای مرجع زمانی رخ می دهد که یک برنامه سعی می کند به متغیری اشاره کند که در دسترس نیست یا خارج از محدوده است.
TypeError
جاوا اسکریپت زمانی که نمی تواند عملیاتی را انجام دهد می تواند یک خطای نوع ایجاد کند زیرا نوع مورد انتظار با نوع دریافتی متفاوت است.
خطای URIE
این خطا در صورتی رخ می دهد که از یک تابع مدیریت URI سراسری – مانند decodeURIcomponent() – به اشتباه استفاده کنید. در نتیجه، رمزگذاری یا رمزگشایی با شکست مواجه می شود.
AggregateError
این خطا برای نشان دادن چندین خطا در یک خطا استفاده می شود. زمانی که می خواهید خطاهای زیادی را به طور همزمان انجام دهید از آن استفاده کنید. به عنوان مثال، Promise.any() می تواند یک AggregateError() پرتاب کند، زمانی که همه وعده های ارسال شده به آن رد شوند.
Internal error
هنگامی که یک خطا در موتور جاوا اسکریپت رخ می دهد، یک خطای داخلی ایجاد می شود.
RangeError
برخی از توابع محدوده مقادیری را که می توانید به عنوان آرگومان ارسال کنید، دیکته می کنند. این خطا زمانی رخ می دهد که شما سعی می کنید مقداری را ارسال کنید که در آن محدوده گنجانده نشده است.
مرتبط:نحوه فعال کردن جاوا اسکریپت در موزیلا فایرفاکس
مدیریت خطا با بلوک Try…Catch
جاوا اسکریپت قابلیت مدیریت استثناهای داخلی را با بلوک try… catch… در نهایت فراهم می کند. همچنین به شما اجازه می دهد تا با استفاده از عملگر پرتاب خطاهای خود را مطرح کنید.
می توانید از بلوک try…catch برای رسیدگی به خطاهایی که در زمان اجرا رخ می دهند استفاده کنید. شما کد معتبری می نویسید که انتظار دارید در بلوک try به درستی اجرا شود. در بلوک catch، می توانید کد رسیدگی به خطا را بنویسید.
try {
// Valid Javascript code
} catch (error) {
// Handle error
} finally {
// Executed even when an error occurs
}
اگر کد موجود در بلوک try هیچ خطایی ایجاد نکند، بلوک catch نادیده گرفته میشود. اگر خطایی ایجاد کند، اجرا به بلوک catch میرود. کد در بلوک نهایی چه خطایی رخ دهد یا نه اجرا می شود. این بلوک اجباری نیست، بنابراین اگر به آن نیاز ندارید آن را حذف کنید.
کدی که در بلوک try وارد میکنید باید معتبر باشد. اگر اینطور نباشد، جاوا اسکریپت یک خطای تجزیه ایجاد می کند.
بیایید به یک مثال عملی نگاه کنیم:
try {
console.log(text)
} catch (error) {
console.log(error.message)
} finally {
console.log("Will be executed regardless")
}
این برنامه سعی می کند مقدار متغیر متن را ثبت کند. از آنجایی که آن متغیر تعریف نشده است، برنامه خطا خواهد کرد. این خطا روی کنسول در بلوک catch چاپ شده است. سپس بلوک نهایی اجرا می شود و پیامی را چاپ می کند.
ReferenceError: text is not defined
Will be executed regardless
در مواقعی که باید خطای خود را مطرح کنید، از عملگر پرتاب استفاده کنید.
این مثال را در نظر بگیرید که در صورت نادرست بودن داده ها خطا می دهد:
const data = getData()
try {
if (!data) {
throw "No data"
}
console.log(data)
// continue
} catch(error) {
console.log(error) // "No data"
}
در این مثال، برنامه تابع getData() را فراخوانی می کند و نتیجه آن را به متغیر داده اختصاص می دهد. در بلوک try، اگر داده خالی باشد، بلوک یک خطای سفارشی می دهد. بلوک catch آن خطا را می گیرد و آن را در کنسول ثبت می کند.
پرتاب خطا در طول توسعه بسیار سودمند است. می توانید از پیام خطای سفارشی برای درک اینکه چرا برنامه شما مطابق انتظار کار نمی کند استفاده کنید.
همانطور که این مثال نشان می دهد، می توانید از یک رشته برای شی خطا استفاده کنید. در واقع می توانید هر عبارت جاوا اسکریپت را به عنوان یک خطا پرتاب کنید. با این حال، برای سازگاری با خطاهای داخلی، از یک شی جاوا اسکریپت حاوی نام و پیام استفاده کنید.
throw {
name: "Error name",
message: "Error message"
}
شما همچنین می توانید از سازنده های داخلی جاوا اسکریپت در هنگام پرتاب خطا استفاده کنید. این سازنده ها شامل Error، SyntaxError و ReferenceError و غیره هستند.
برای ایجاد خطا با استفاده از سازنده Error، از این کد استفاده کنید:
throw new Error("No data")
اکنون می توانید نام و پیام را ارجاع دهید.
console.log(error.name) // Error
console.log(error.message) // No data
گسترش شی خطای جاوا اسکریپت
یک کلاس خطای سفارشی هنگام رسیدگی به خطاهایی که با اشیایی که قبلاً توسط جاوا اسکریپت ارائه شده مطابقت ندارند مفید است. به عنوان مثال، ممکن است بخواهید یک خطای اعتبارسنجی داده را به عنوان یک نوع خاص به نام ValidationError جدا کنید.
شما می توانید از یک کلاس JavaScript ES2015 برای ایجاد یک کلاس خطای سفارشی استفاده کنید.
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
با استفاده از کلاس ValidationError یک خطا را به این صورت پرتاب کنید:
throw new ValidationError("Your error message")
خطای پرتاب شده یک شی با نام و مقادیر پیام خواهد بود.
{
name: "ValidationError",
message: "Your error message"
}
خطاها برای کمک وجود دارند
مدیریت خطا بخش اساسی برنامه نویسی است، از هر زبانی که استفاده می کنید. جاوا اسکریپت پشتیبانی بسیار خوبی برای بالا بردن و گرفتن خطاها در سبک استثنا دارد. همچنین دارای چندین نوع خطای داخلی است که می توانید آنها را مدیریت کرده و برای موارد خود استفاده کنید.
هنگامی که جاوا اسکریپت را در حالت نامرتب می نویسید، برخی از خطاها مانند خطاهای نحوی می توانند شناسایی نشوند. استفاده از حالت سخت به جاوا اسکریپت اجازه می دهد تا خطاهایی را که در غیر این صورت نادیده می گرفت را شناسایی کند.