بی مقدمه بریم سر اصل مطلب, انواع خطاهای جاوا اسکریپت:
خطاهای دستوری یا قاعده ای در صورتی اتفاق میفتند که یکی یا چندتا از سینتکس های (قواعد) زبان جاوا اسکریپت رو اشتباه نوشته باشیم. خوشبختانه این خطاها رو سریع میتونیم پیدا و دیباگ کنیم چون برنامههایی که دارای چنین اشکالاتی باشند، قابل اجرا نیستند و کد ادیتور یه خط قرمز زیر کد برامون میزاره. مثلا:
const func = () =>
console.log(hello)
}
خروجی:
}
^
SyntaxError: Unexpected token }
چون توی مثال بالا براکتی باز نکردیم کد ادیتور زمان اجرا خطا سینتکس داده و گفته اون قطعه کدمون براکت باز نداره.
این خطاها معمولا زمانی اتفاق می افتند که تابعی که وجود نداره و یا متغیری که تعریف نشده رو بخایم فراخوانی کنیم. مثال زیر رو ببینید:
console.log(x);
خروجی:
console.log(x);
^
ReferenceError: x is not defined
در این مثال متغیر x تعریف نشده و همونطور که ملاحظه میکنید بهمون گفته متغیر رفرنسی نداره.
همونطوری که از اسمش هم مشخصه, این نوع خطا زمانی اتفاق می افته که نوع داده به کار برده شده درست نباشه. مثلا:
let num = 15;
console.log(num.split(""));
خروجی:
console.log(num.split(""));
^
TypeError: num.split is not a function
بله; چون تابع split در جاوا اسکریپت فقط روی آرایه ها اعمال میشه, ولی اینجا متغیر num از نوع داده ای number هست به خطای تایپی برخوردیم.
این خطا برای اکما اسکریپت های نسخه 6 به قبل بود و موتورهای جاوا اسکریپت امروزی, دیگه این خطا رو نمیدن. ولی بازم خوبه که بررسیش کنیم. مثال زیر رو ببینید:
try{
throw new EvalError("'Throws an error'")
}catch(error){
console.log(error.name, error.message)
}
خروجی:
EvalError 'Throws an error'
همونطور که در مثال میبینید, زمانی که از تابع ()EvalError استفاده می شه، این خطا فراخوانی می شه.
اگر مقدار در محدوده عددی تعیین شده نباشه این خطا اتفاق میفته, مثال رو ببینید:
const checkRange = (num)=>{
if (num < 30) throw new RangeError("Wrong number");
return true
}
checkRange(20);
خروجی:
if (num < 30) throw new RangeError("Wrong number");
^
RangeError: Wrong number
زمانی که شما از کارکتر های نامعتبر در فانکشن ها و توابع مربوط به url استفاده میکنید این خطا اتفاق میفته.
console.log(decodeURI("https://www.educative.io/shoteditor"))
console.log(decodeURI("%sdfk"))
خروجی:
console.log(decodeURI("%sdfk"));
^
URIError: URI malformed
این خطا زمانی اتفاق می افته که دیتا های خروجی بی نهایت بشن و دیگه موتور جی اس نتونه حجم دیتا ها رو هندل کنه, مثل حلقه های بی نهایت. مثال زیر رو ببینید:
switch(condition) {
case 1:
...
break
case 2:
...
break
case 3:
...
break
case 4:
...
break
case 5:
...
break
case 6:
...
break
case 7:
...
break
... up to 500 cases
}