فصل ۱۶: رفع خطا و Debug در جاوااسکریپت

مقدمه: چرا رفع خطا مهم است؟
وقتی برنامه مینویسی، پیش میآید که کد درست اجرا نشود یا پیغام خطا ببینی. رفع خطا (Debugging) یکی از مهمترین مهارتها برای هر برنامهنویس است.
در این فصل یاد میگیری:
- انواع خطا چیست
- چطور خطاها را بخوانیم و تحلیل کنیم
- از ابزارهای ساده مرورگر برای پیدا کردن مشکلات استفاده کنیم
- با try…catch جلوی متوقف شدن برنامه را بگیریم
انواع خطا در جاوااسکریپت
۱. Syntax Error
خطای دستوری؛ وقتی کد را اشتباه تایپ کنی (مثلاً فراموش کردن ; یا { یا })
console.log("salam"
خروجی Console:
Uncaught SyntaxError: missing ) after argument list
۲. Reference Error
وقتی متغیر یا چیزی را صدا بزنی که تعریف نشده
console.log(name); // name تعریف نشده
خروجی Console:
Uncaught ReferenceError: name is not defined
۳. Type Error
وقتی نوع داده را اشتباه استفاده کنی
let num = 5;
num(); // عدد تابع نیست!
خروجی Console:
Uncaught TypeError: num is not a function
چگونه خطاها را بخوانیم و حل کنیم؟
- کد خطا و نوع خطا را با دقت بخوان (در کنسول مرورگر)
- خطی که خطا در آن اتفاق افتاده را بررسی کن (شماره خط کنسول)
- پیام خطا معمولا راهنمایی میکند که دنبال چه مشکل یا فراموشی بگردی
ابزار Debug در مرورگر (عمدتا Chrome)
برای دیدن خطاها:
- کلید F12 یا راست کلیک > Inspect را بزن
- روی تب Console کلیک کن
- پیغامها و نوع خطاها را ببین
دستورات مفید Console
console.log('این پیام برای بررسی است');
console.error('این یک خطا است!');
console.warn('این یک هشدار است!');
استفاده از try…catch
گاهی میخواهیم ذکر کنیم اگر خطایی پیش آمد، برنامه متوقف نشود و پیام مناسب نمایش داده شود.
try {
let result = 10 / x; // اگر x تعریف نشده باشد، خطا میدهد
console.log(result);
} catch (error) {
console.log('یک خطا رخ داد:', error.message);
}
مثال عملی: رفع خطا در کد
فرض کن این کد را نوشتی و اجرا نمیشود:
let numbers = [1, 2, 3];
for (let i = 0; i <= numbers.length; i++) {
console.log(numbers[i]);
}
مشکل چیست؟
- چون اندیس آرایه از ۰ تا (
numbers.length - 1) است،numbers[i]آخرین بار مقدار undefined میدهد. - درستش:
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
تمرین کوتاه:
یک کد جاوااسکریپت بنویس که یک عدد را به عدد بعدی تقسیم کند. قسمت تقسیم را داخل try…catch قرار بده تا اگر کسی عدد دوم را ۰ وارد کرد، برتامه ایمن کار کند و خطا نمایش دهد:
let a = 10;
let b = 0; // امتحان کن b رو صفر بذار
try {
let division = a / b;
if (!isFinite(division)) throw new Error("تقسیم بر صفر مجاز نیست!");
console.log(division);
} catch (err) {
console.error('خطا:', err.message);
}