أخطاء البرمجة أمر لا مفر منه. عاجلاً أم آجلاً ، سيواجه تطبيقك بعض السلوك غير المتوقع. مثل أي لغة برمجة أخرى ، تثير JavaScript أخطاء عندما يحدث خطأ ما في شفرتك.

تؤدي الأخطاء إلى تعطيل التدفق الطبيعي للتطبيق. لكنها تساعد أيضًا في حماية تطبيقك من السلوك غير المتوقع. معرفة كيفية التعامل مع الأخطاء بشكل صحيح أمر بالغ الأهمية.

لماذا يعتبر التعامل مع الخطأ مهمًا؟

يساهم التعامل مع الأخطاء في تحسين تجربة المستخدم. يمكنك استبدال أخطاء جافا سكريبت الافتراضية وأحيانًا الأخطاء المطولة برسائل خطأ أكثر قابلية للقراءة من قبل الإنسان. يمكنك التعامل برشاقة مع أسباب بعض الأخطاء والحفاظ على تشغيل برنامجك بدلاً من تركه.

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

بنية أخطاء JavaScript المضمنة

أخطاء JavaScript هي كائنات لها ثلاث خصائص:

  • اسم: هذا هو اسم الخطأ. على سبيل المثال ، سيؤدي اسم متغير مفقود إلى ظهور خطأ يسمى SyntaxError.
  • رسالة: هذا هو نص الرسالة ويشرح الخطأ نصيًا.
  • instagram viewer
  • موجه: يمكنك استخدام هذه الخاصية مع الأخطاء المخصصة لتتبع مكدس الاستدعاءات.

أنواع الأخطاء الشائعة في JavaScript

فيما يلي بعض الأخطاء الشائعة الموجودة في JavaScript.

خطأ في بناء الجملة

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

  • أسماء المتغيرات مفقودة.
  • "}" مفقود بعد دالة.
  • مفقود ")" بعد الشرط.

المرجع خطأ

تحدث الأخطاء المرجعية عندما يحاول أحد البرامج القيام بذلك الإشارة إلى متغير غير متوفر أو خارج النطاق.

خطأ مطبعي

يمكن أن تطرح JavaScript خطأ في النوع عندما لا تتمكن من إجراء عملية لأن النوع الذي تتوقعه يختلف عن النوع الذي تتلقاه.

URIError

يحدث هذا الخطأ إذا كنت تستخدم دالة معالجة URI عامة - مثل decodeURIComponent () - بشكل غير صحيح. نتيجة لذلك ، فشل التشفير أو فك التشفير.

مجمع خطأ

يستخدم هذا الخطأ لتمثيل أخطاء متعددة ملفوفة في خطأ واحد. استخدمه عندما تريد إلقاء العديد من الأخطاء في وقت واحد. على سبيل المثال ، يمكن لـ Promise.any () طرح AggregateError () عند رفض جميع الوعود التي تم تمريرها إليه.

خطأ داخلي

يتم طرح خطأ داخلي عند حدوث خطأ داخل محرك JavaScript.

RangeError

تحدد بعض الوظائف نطاق القيم التي يمكنك تمريرها كوسيطات. يحدث هذا الخطأ عند محاولة تمرير قيمة غير مضمنة في هذا النطاق.

خطأ في التعامل مع المحاولة... كاتش بلوك

يوفر JavaScript وظيفة معالجة الاستثناءات المضمنة بامتداد حاول... قبض... أخيرًا الكتلة. كما يسمح لك برفع أخطائك باستخدام ملف يرمي المشغل أو العامل.

يمكنك استخدام كتلة try… catch للتعامل مع الأخطاء التي تحدث أثناء وقت التشغيل. تكتب رمزًا صالحًا تتوقع تنفيذه بشكل صحيح في كتلة try. في كتلة catch ، يمكنك كتابة رمز معالجة الأخطاء.

محاولة {
// كود جافا سكريبت صالح
} قبض على (خطأ) {
// معالجة الخطأ
} أخيرا {
// يتم تنفيذه حتى عند حدوث خطأ
}

يتم تجاهل كتلة catch إذا كانت الشفرة الموجودة في مجموعة try لا تسبب أي أخطاء. إذا تسبب في حدوث خطأ ، ينتقل التنفيذ إلى كتلة catch. يتم تشغيل الكود الموجود في الكتلة النهائية سواء حدث خطأ أم لا. هذا الحظر ليس إلزاميًا ، لذا قم بحذفه إذا لم تكن بحاجة إليه.

يجب أن يكون الرمز الذي تقوم بتضمينه في كتلة المحاولة صالحًا. إذا لم يكن الأمر كذلك ، فسيقوم جافا سكريبت بخطأ في التحليل.

دعونا نلقي نظرة على مثال عملي:

محاولة {
وحدة التحكم.log (نص)
} قبض على (خطأ) {
وحدة التحكم.سجل(خطأ.رسالة)
} أخيرا {
console.log ("سيتم تنفيذه بغض النظر")
}

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

المرجع خطأ: لم يتم تعريف النص
سيتم تنفيذه بغض النظر

في المواقف التي تحتاج فيها إلى رفع مستوى الخطأ الخاص بك ، استخدم ملف يرمي المشغل أو العامل.

ضع في اعتبارك هذا المثال الذي يلقي بخطأ إذا كانت البيانات خاطئة:

مقدار ثابت data = getData ()

محاولة {
إذا (! بيانات) {
يرمي "لايوجد بيانات"
}

وحدة التحكم.تسجيل البيانات)
// استمر
} قبض على(خطأ) {
وحدة التحكم.log (خطأ) // "لايوجد بيانات"
}

في هذا المثال ، يستدعي البرنامج الدالة getData () ويعين نتيجتها إلى متغير البيانات. في كتلة try ، تلقي الكتلة خطأ مخصص إذا كانت البيانات فارغة. تكتشف كتلة catch هذا الخطأ وتسجيله في وحدة التحكم.

رمي الأخطاء مفيد جدًا أثناء التطوير. يمكنك استخدام رسالة الخطأ المخصصة لفهم سبب عدم عمل التطبيق الخاص بك كما هو متوقع.

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

يرمي {
اسم: "اسم الخطأ",
رسالة: "رسالة خطأ"
}

يمكنك أيضًا استخدام المنشئات المضمنة في JavaScript عند حدوث أخطاء. تتضمن هذه المنشئات Error و SyntaxError و ReferenceError ، من بين أمور أخرى.

لإلقاء خطأ باستخدام مُنشئ الخطأ ، استخدم هذا الرمز:

يرميالجديدخطأ("لايوجد بيانات")

يمكنك الآن الرجوع إلى الاسم والرسالة.

وحدة التحكم.log (error.name) // خطأ
وحدة التحكم.log (error.message) // لايوجد بيانات

تمديد كائن خطأ JavaScript

تكون فئة الخطأ المخصصة مفيدة عند معالجة الأخطاء التي لا تتوافق مع الكائنات التي تم توفيرها بالفعل بواسطة JavaScript. على سبيل المثال ، قد ترغب في عزل خطأ التحقق من صحة البيانات كنوع محدد يسمى ValidationError.

يمكنك استخدام ملف فئة JavaScript ES2015 لإنشاء فئة خطأ مخصصة.

صف دراسيخطئ في التحققيمتدخطأ{
البناء(رسالة) {
ممتاز(رسالة)؛
this.name = "خطئ في التحقق";
}
}

ألقِ خطأً باستخدام فئة ValidationError مثل هذا:

يرميالجديد ValidationError ("رسالة الخطأ الخاصة بك")

سيكون الخطأ الذي تم إلقاؤه كائنًا يحمل الاسم وقيم الرسالة.

{
اسم: "خطئ في التحقق",
رسالة: "رسالة الخطأ الخاصة بك"
}

هناك أخطاء للمساعدة

تعتبر معالجة الأخطاء جزءًا أساسيًا من البرمجة ، بغض النظر عن اللغة التي تستخدمها. تتمتع JavaScript بدعم كبير لإثارة الأخطاء والتقاطها في أسلوب الاستثناءات. يحتوي أيضًا على العديد من أنواع الأخطاء المضمنة التي يمكنك التعامل معها واستخدامها لحالاتك الخاصة.

يمكن عدم اكتشاف بعض الأخطاء مثل أخطاء بناء الجملة عندما تكتب JavaScript في "الوضع القذر". يسمح استخدام الوضع المتشدد لجافا سكريبت باكتشاف الأخطاء التي كانت ستتجاهلها بخلاف ذلك.