JavaScript: الأخطاء والتصحيح في JavaScript

آخر تحديث: 2026-10-13

كتابة كود خالٍ من الأخطاء مستحيل — حتى مبتكر JavaScript أنتج خطأ typeof null === "object" في 10 أيام فقط. لذا تعلم العثور على الأخطاء ومعالجتها أهم من تعلم كتابة الكود.

دوال BOM ذات صلة:console.error() console.table() console.log() try...catch JSON.parse finally return error catch

1. معالجة الأخطاء والتصحيح

نوع الخطأ السبب مثال
SyntaxError صيغة غير صالحة if (true { — أقواس غير متطابقة
ReferenceError الوصول إلى متغير غير موجود console.log(notExist)
TypeError العمل على نوع خاطئ undefined.toString()
RangeError القيمة خارج النطاق الصالح new Array(-1)

SyntaxError يُ catch قبل تنفيذ الكود (مرحلة التحليل). الأخطاء الأخرى هي أخطاء وقت التشغيل.

(2) try...catch...finally

استخدم try...catch ل catch أخطاء الوقت التشغيل ومنع تعطل برنامجك:

HTML
<script>
try {
  const data = JSON.parse('{bad json}');
} catch (error) {
  console.log("فشل التحليل:", error.message);
} finally {
  console.log("عملية التنظيف");
}
</script>

كائن error في catch لديه خاصيتان مستخدمتان بشكل شائع:

(3) throw — إلقاء الأخطاء يدوياً

try...catch يمكنه فقط catch أخطاء الوقت التشغيل، لكن أخطاء المنطق التجاري تحتاج إلى إلقائها يدوياً:

HTML
<script>
function setAge(age) {
  if (typeof age !== "number" || age < 0) {
    throw new Error("العمر يجب أن يكون رقماً موجباً");
  }
  console.log("تم تعيين العمر إلى: " + age);
}

try {
  setAge(-5);
} catch (e) {
  console.log(e.message);
}
</script>

throw يمكن أن تلقي أي قيمة، لكن يُنصح باستخدام new Error() أو فرعياتها — تتضمن معلومات تتبع المكدس.

(4) رسائل الأخطاء المخصصة

استخدم فرعيات Error أو خصائص مخصصة لتوفير معلومات أكثر ثراءً عن الأخطاء:

HTML
<script>
class ValidationError extends Error {
  constructor(field, message) {
    super(message);
    this.name = "ValidationError";
    this.field = field;
  }
}

try {
  throw new ValidationError("email", "تنسيق بريد إلكتروني غير صالح");
} catch (e) {
  console.log(e.name + " [" + e.field + "]: " + e.message);
}
</script>

(5) أدوات المتصفح (F12)

اللوحة الغرض
Console عرض السجلات، تنفيذ الكود، رؤية الأخطاء
Sources تعيين نقاط توقف، تنفيذ سطر بسطر، فحص المتغيرات
Network فحص طلبات الشبكة، حالة الاستجابة، أوقات التحميل
Elements عرض/تعديل DOM والأنماط

تصحيح نقاط التوقف هو أقوى تقنية تصحيح: انقر على رقم السطر في لوحة Sources لتعيين نقطة توقف، حدث الصفحة، يتوقف الكود عند تلك النقطة — تنفيذ سطر بسطر، فحص المتغيرات، وفحص مكدس الاتصال.

(6) عائلة console

الطريقة الغرض
console.log() إخراج عام
console.warn() تحذير (أصفر)
console.error() خطأ (أحمر)
console.table() عرض المصفوفات/الكائنات كجدول
console.time() / console.timeEnd() قياس الوقت
console.group() / console.groupEnd() إخراج مجمع
console.clear() مسح وحدة التحكم

console.table مفيد بشكل خاص لعرض مصفوفات الكائنات — أكثر قابلية للقراءة من log.

(7) نصائح التحيح


▶ مثال: try/catch لتحليل JSON

▶ جرّب الكود

▶ مثال: أخطاء مخصصة والتحقق من النماذج

▶ جرّب الكود

▶ مثال: مرجع سريع لأنواع الأخطاء وطرق console

▶ جرّب الكود

دوال BOM ذات صلة:console.error() console.table() console.log() try...catch JSON.parse finally return error catch

❓ أسئلة شائعة

س هل يمكن لـ try...catch التقاط SyntaxError؟
ج لا. SyntaxError تُطرح أثناء مرحلة التحليل قبل بدء التنفيذ، لذا بلوك try لا يصل أبداً. ومع ذلك، إذا حدث SyntaxError وقت التشغيل (مثل فشل JSON.parse، أو new Function("bad syntax"))، يمكن التقاطه.
س متى أستخدم finally؟
ج عندما تحتاج عمليات التنظيف أن تعمل بغض النظر عن حدوث خطأ — إغلاق الملفات، تحرير الموارد، إخفاء حالات التحميل. لمعظم السيناريوهات البسيطة، catch وحده كافٍ.
س ما الفرق بين throw و return؟
ج return للتدفق الطبيعي — المتصل يتعامل مع القيمة المرجعة. throw للتدفق غير الطبيعي — يتخطى الكود اللاحق ويرتفع في مكدس الاتصال بحثاً عن catch. استخدم throw للأخطاء، return للنتائج الطبيعية.

📖 ملخص

📝 تمارين

  1. اكتب دالة safeDivide(a, b) تستخدم try...catch لمعالجة القسمة على صفر (تلميح: القسمة على صفر في JS لا تلقي خطأ — تحتاج للتحقق والإلقاء بنفسك). تُرجع النتيجة أو رسالة خطأ.
  2. اكتب دالة safeJSONParse(str) تحلل سلسلة JSON. عند الفشل، تُرجع { success: false, error: <رسالة الخطأ> }. عند النجاح، تُرجع { success: true, data: <نتيجة التحليل> }.
  3. اكتب دالة retry(fn, times): نفّذ fn، وإذا ألقت خطأ، أعد المحاولة حتى times مرات. إذا فشلت جميع المحاولات، اطرح الخطأ الأخير. نفّذ باستخدام try...catch.
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%