واحد. Miscategorized
1. خطأ بناء الجملة
المعروف أيضًا باسم أخطاء التحليل ، يحدث عند التجميع بلغات البرمجة التقليدية ، ويحدث في JavaScript عند التفسير. هذه الأخطاء ناتجة مباشرة عن أحرف غير متوقعة في الكود ، ثم لا يمكن تجميعها/تفسيرها مباشرة. على سبيل المثال ، يفتقر سطر الكود إلى قوس الإغلاق ، مما يؤدي إلى خطأ في بناء الجملة. عند حدوث خطأ في بناء الجملة ، لا يمكن تنفيذ الكود. في JavaScript ، سوف يتأثر رمز فقط في نفس الخيط بأخطاء بناء الجملة. يمكن أن تستمر التعليمات البرمجية في مؤشرات الترابط الأخرى وفي الملفات الأخرى المرجع خارجيًا للتنفيذ إذا لم يكن يعتمد على الرمز الذي يحتوي على الخطأ.
2. خطأ وقت التشغيل
المعروف أيضًا باسم الاستثناء (استثناء ، بعد ترجمة/مترجم). في هذه المرحلة ، فإن المشكلة ليست في بناء جملة الكود ، ولكن في بعض الحالات تكون العملية التي تمت إكمالها غير قانونية. على سبيل المثال.
window.openmyfile () ؛
نظرًا لأن طريقة OpenMyFile () غير موجودة ، فإن المتصفح سيعيد استثناء. تؤثر الاستثناءات فقط على مؤشر الترابط الذي يحدث ، ويمكن أن تستمر مؤشرات ترابط JavaScript الأخرى بشكل طبيعي.
اثنين. التعامل مع الأخطاء
1. وظيفة معالجة الأحداث الواحدة
هذه هي الآلية الأولى لمساعدة JavaScript في التعامل مع الأخطاء. عندما يحدث استثناء على الصفحة ، يتم إطلاق حدث الخطأ على كائن النافذة. على سبيل المثال.
نسخة الكود كما يلي:
<html>
<head>
<title> مثال onerror </title>
<script type = "text/javaScript">
window.onerror = function () {
تنبيه ("حدث خطأ!") ؛
}
</script>
</head>
<body onload = "function1 ()">
</body>
</html>
في الكود أعلاه ، محاولة استدعاء وظيفة غير موجودة أثناء تحميل الصفحة ، سيتم جمع استثناء. رسالة خطأ مفادها أن "الخطأ حدث" يظهر. ومع ذلك ، يتم أيضًا عرض رسالة خطأ المتصفح. كيف تخفيها في المتصفح؟ فقط أعد طريقة حقيقية.
نسخة الكود كما يلي:
<script type = "text/javaScript">
window.onerror = function () {
تنبيه ("حدث خطأ!") ؛
العودة صحيح.
}
</script>
1) إزالة رسالة الخطأ
يوفر معالج Onerror ثلاثة أنواع من المعلومات لتحديد الطبيعة الدقيقة للخطأ:
1) رسالة الخطأ - لخطأ معين ، سيعرض المتصفح نفس المعلومات ؛
2) عنوان URL - في أي ملف حدث خطأ ؛
رقم السطر - رقم السطر حيث حدث الخطأ في عنوان URL المحدد.
انظر المثال التالي لطرق الوصول:
نسخة الكود كما يلي:
<script type = "text/javaScript">
window.onerror = وظيفة (smessage ، surl ، sline) {
تنبيه ("حدث خطأ!/n" + smessage + "/nurl:" + surl + "/nline رقم:" + sline) ؛
العودة صحيح.
}
</script>
2) خطأ في تحميل الصورة
كائن النافذة ليس هو الكائن الوحيد الذي يدعم وظيفة معالجة أحداث Onerror ، كما أنه يوفر الدعم لكائنات الصورة. عندما لا يمكن تحميل الصورة بنجاح بسبب عدم وجود الملف ، يتم تشغيل حدث الخطأ على الصورة. دعونا نلقي نظرة على مثال:
<img src = "amigo.jpg" oneerror = "Alert ('حدث خطأ أثناء تحميل الصورة") "/>
يخصص المثال أعلاه مباشرة وظيفة معالج الأحداث Onerror في HTML. بالطبع ، يمكنك أيضًا تخصيص وظائف معالجة الأحداث من خلال البرامج النصية. قبل تعيين خصائص SRC للصورة ، يجب أن تنتظر حتى يتم تحميل الصفحة بالكامل. الرمز كما يلي:
نسخة الكود كما يلي:
<html>
<head>
<title> اختبار خطأ الصورة </title>
<script type = "text/javaScript">
وظيفة HandleLoad () {
document.images [0] .onerror = function () {
تنبيه ("حدث خطأ أثناء تحميل الصورة!") ؛
} ؛
document.images [0] .src = "amigo.jpg" ؛
}
</script>
</head>
<body Onload = "HandleLoad ()">
<img/>
<body>
</html>
ملاحظة: على عكس وظيفة معالج أحداث Onerror لكائن النافذة ، يحتوي حدث Onerror للصورة على أي معلمات معلومات إضافية.
3) التعامل مع أخطاء بناء الجملة
يمكن أن يعالج Onerror أخطاء بناء الجملة. ولكن يجب الإشارة إلى شيء واحد أن معالج الأحداث يجب أن يكون الرمز الأول الذي يظهر على الصفحة ، لأنه في حالة حدوث خطأ في بناء الجملة قبل تعيين معالج الحدث ، سيكون معالج الأحداث عديم الفائدة.
ملاحظة: ستوقف أخطاء بناء الجملة تمامًا تنفيذ الرمز.
ملاحظة: المشكلة الرئيسية في استخدام معالج أحداث Onerror هي أنها جزء من BOM ، لذلك لا يمكن لأي قياسي التحكم في سلوكه. لذلك ، تستخدم المتصفحات المختلفة هذا الحدث للتعامل مع الأخطاء بشكل كبير. على سبيل المثال. عند حدوث حدث خطأ في IE ، سيستمر تنفيذ التعليمات البرمجية العادية ، يتم الاحتفاظ بجميع المتغيرات والبيانات ، ويمكن الوصول إليها من خلال وظيفة معالج أحداث Onerror. في Mozilla ، سينتهي تنفيذ التعليمات البرمجية العادية ، ويتم تدمير جميع المتغيرات والبيانات قبل حدوث الخطأ.
2. حاول ... بيان الصيد
ECMPSCRESS EDITION تقدم TRAW ... CATK. على سبيل المثال.
نسخة الكود كما يلي:
يحاول {
window.openfile1 () ؛
تنبيه ("تسمى بنجاح طريقة OpenFile1") ؛
} catch (استثناء) {
تنبيه ("استثناء حدث!") ؛
} أخيراً {
تنبيه ("جرب .. انتهاء اختبار CATCH!") ؛
}
على عكس Java ، يمكن أن يكون لمعيار ECMASCript فقط عبارة صيد واحدة فقط في Try ... Catch Date ، لأن JavaScript هي لغة من النوع الضعيف ولا يمكنها تحديد نوع الاستثناء المحدد في جملة Catch. بغض النظر عن نوع الخطأ ، يتم التعامل معه بواسطة نفس بيان الصيد. ومع ذلك ، قامت Mozilla بتوسيعها ويمكن أن تضيف عبارات الصيد المتعددة ، والتي لا ينصح بها باستخدام بهذه الطريقة.
يستخدم أخيرًا لتضمين الكود المراد تنفيذه بغض النظر عما إذا كان الاستثناء يحدث ، وهو أمر مفيد لإغلاق الروابط المفتوحة وموارد تحريرها.
1) جرب المتداخلة ... بيان الصيد
تستخدم للتعامل مع مشاكل الأخطاء في شروط الصيد ، دعنا نلقي نظرة على مثال ، الرمز هو كما يلي:
نسخة الكود كما يلي:
يحاول {
eval ("a ++ b") ؛
} catch (oexception) {
تنبيه ("حدث خطأ!") ؛
يحاول {
var aerror = صفيف جديد (1000000000000000000000000000000000000000000000000000000000000000000) ؛
} catch (استثناء) {
تنبيه ("حدث خطأ في جملة الصيد!") ؛
}
} أخيراً{
تنبيه ("مكتمل")
}
2) كائن الخطأ
عند حدوث خطأ ، يكون لدى JavaScript فئة قاعدة خطأ للرمي. لها خصائصان:
ط) الاسم - سلسلة تمثل النوع الخطأ
II) الرسالة - رسالة الخطأ الفعلية.
يتوافق اسم كائن الخطأ مع فئته ويمكن أن يكون أحد القيم التالية:
evalerror: يحدث الخطأ في وظيفة eval () ؛
RangeError: القيمة الرقمية تتجاوز النطاق الذي يمكن أن تمثله JavaScript ؛
المرجع: تم استخدام مرجع غير قانوني ؛
بناء الجملة: حدث خطأ في بناء الجملة في استدعاء دالة eval () ، والأخطاء الأخرى التي تم الإبلاغ عنها بشكل متزايد من قبل المتصفح ولا يمكن معالجتها من خلال المحاولة ... الصيد ؛
Typeerror: نوع المتغير ليس ما يتوقع أن يكون مطلوبًا ؛
Urierror: حدث خطأ في وظيفة Encodeuri أو decodeuri.
3) تحديد نوع الخطأ
يمكن استخدام الطريقتين التاليتين لتحديد نوع الخطأ. تعتمد الطريقة الأولى على سمة الاسم للاستثناء ، على النحو التالي:
نسخة الكود كما يلي:
يحاول {
eval ("a ++ b") ؛
} catch (oexception) {
if (oException.name = "SyntaxError") {
تنبيه ("Syntaxerror حدث!") ؛
} آخر {
تنبيه ("حدث خطأ آخر!") ؛
}
}
يتم استخدام عامل التشغيل في الثانية ، والرمز كما يلي:
نسخة الكود كما يلي:
يحاول {
eval ("a ++ b") ؛
} catch (oexception) {
if (مثيل OException من Syntaxerror) {
تنبيه ("Syntaxerror حدث!") ؛
} آخر {
تنبيه ("حدث خطأ آخر!") ؛
}
}
4) رمي استثناء بيان رمي
في الإصدار الثالث من ECMASCRIPT ، يتم استخدامه لرمي الاستثناءات عن قصد. يمكن أن يكون كائن الخطأ الذي تم إلقاؤه عبارة عن سلسلة أو رقم أو قيمة منطقية أو كائن فعلي أو كائن خطأ (يحتوي مُنشئه على وظيفة واحدة فقط ، أي رسالة خطأ). EG1. رمي خطأ جديد ("حدث خطأ!") ؛
EG2.
نسخة الكود كما يلي:
وظيفة addtwonumber (a ، b) {
if (ediuments.length <2) {
رمي خطأ جديد ("يجب أن يتم تمرير رقمين في!") ؛
}
}
يحاول {
النتيجة = addTwonumber (90) ؛
} catch (oexception) {
if (مثيل OException من Syntaxerror) {
تنبيه ("SyntaxError:" + oexception.message) ؛
} آخر إذا (exception مثيل error) {
تنبيه (oexception.message) ؛
}
}
ما سبق هو كل المحتوى الموضح في هذه المقالة. أتمنى أن يعجبك.