أنواع الأخطاء
// خطأ صياغة (Syntax) — كود غير صالح
let x = ;
// خطأ مرجعي (Reference) — متغيّر غير معرّف
console.log(undefinedVar);
// خطأ نوع (Type) — عملية على نوع خاطئ
null.toUpperCase();
التعامل مع الأخطاء: try ... catch
يمنع الخطأ من إيقاف البرنامج كله:
try {
let data = JSON.parse("نص غير صالح");
} catch (error) {
console.log("حدث خطأ:", error.message);
} finally {
console.log("يُنفَّذ دائمًا"); // اختياري
}
try: الكود الذي قد يخطئ.catch: ما يحدث عند الخطأ (يستقبل كائن الخطأ).finally: يُنفَّذ في كل الأحوال (تنظيف).
إطلاق أخطاء مخصّصة: throw
function divide(a, b) {
if (b === 0) {
throw new Error("لا يمكن القسمة على صفر");
}
return a / b;
}
try {
divide(10, 0);
} catch (e) {
console.log(e.message); // "لا يمكن القسمة على صفر"
}
أدوات التنقيح (Debugging)
1) console — صديقك الأول
console.log("قيمة x:", x);
console.table(arrayOfObjects); // عرض جدولي
console.error("خطأ");
2) أدوات المطوّر (DevTools)
افتح بـ F12:
- Console: الأخطاء والرسائل.
- Sources: ضع نقاط توقّف (Breakpoints) لإيقاف التنفيذ وفحص القيم سطرًا بسطر.
- Network: لفحص طلبات
fetch.
3) debugger
function calc(x) {
debugger; // يوقف التنفيذ هنا عند فتح DevTools
return x * 2;
}
نصائح للتنقيح
- اقرأ رسالة الخطأ كاملةً — تخبرك بالنوع والسطر.
- اطبع القيم قبل وبعد السطر المشتبه به.
- قسّم المشكلة — علّق أجزاءً حتى تعزل السبب.
الأخطاء الشائعة
- ❌ تجاهل الأخطاء بـ
catchفارغ → يخفي المشاكل. - ❌ عدم قراءة رسالة الخطأ → هي الدليل الأهم.
- ❌ الإفراط في
try/catchحول كل سطر → ضعه حول ما قد يفشل فعلًا.
خلاصة
try/catch/finally يعالج الأخطاء بأمان، وthrow new Error يطلق أخطاء مخصّصة. للتنقيح: console.log، ونقاط التوقّف في DevTools، وdebugger. قراءة رسائل الأخطاء بعناية هي مهارة المبرمج الأهم.