English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
执行JavaScript代码时,可能会发生意想不到的错误。
错误可以是程序员编写的编码错误,由于输入错误引起的错误以及其他不可预见的事情。
因此,为了处理错误,JavaScript提供了4个关键字:
try语句使您可以测试代码块是否存在错误
catch语句可让您处理错误
throw语句可让您创建自定义错误
finally语句使您可以在尝试并捕获之后执行代码,而不管结果如何
在此示例中,我们将“alert”写为“aaalert”来故意产生错误:
try { aaalert("Hello world"); } catch(e) { document.getElementById("result").innerHTML = e.name + "<br>" + e.message; }اختبار لمعرفة‹/›
发生错误时,JavaScript通常会停止运行,并创建一个具有两个属性的Error对象:name和message。
try语句允许您定义一个代码块,该代码块在执行时将进行错误测试。
catch如果try块中发生错误,则该语句允许您定义要执行的代码块。
JavaScript语句try和catch成对出现:
try { //try_statements-尝试尝试的语句 catch(err){ //catch_statements-处理错误的语句 }
جملة throw تطلق استثناءً مخصصًا.
جملة throw تتيح لك إنشاء استثناء مخصص. تقنيًا، يُسمى هذا بـ "إطلاق الاستثناء
يمكن أن تكون الاستثناءات في JavaScript نصوص، أرقام،布尔ية أو كائنات:
throw "Invalid"; // توليد استثناء ذو قيمة string throw 32; // توليد استثناء ذو قيمة 32 throw true; // توليد استثناء ذو قيمة true
إذا تم استخدام throw مع try وcatch، فيمكنك تحديد مسار البرنامج وتوليد رسالة خطأ مخصصة.
في هذا المثال، إذا تم تمرير أي معامل غير عدد، فإن getRectArea() سيطلق استثناءً مخصصًا:
function getRectArea(width, height) { if (isNaN(width) || isNaN(height)) { throw "Parameter is not a number!"; } } try { getRectArea(5, 'Z'); } catch(err) { document.getElementById('para').innerHTML = err; }اختبار لمعرفة‹/›
في هذا المثال، إذا كانت القيمة خاطئة، فإنه يتم إطلاق الاستثناء (err). تقوم جملة catch بحجز الاستثناء (err) وتظهر رسالة خطأ مخصصة:
var x = document.querySelector("input").value; try { if(x == "") throw "is Empty"; if(isNaN(x)) throw "Not a Number"; if(x > 10) throw "too High"; if(x < 5) throw "too Low"; } catch(err) { document.getElementById("para").innerHTML = "Input " + err; }اختبار لمعرفة‹/›
هذا الاستatement finally يتيح لك تنفيذ الكود بعد try وcatch بغض النظر عن النتيجة.
try { aaalert("Hello world"); } catch(err) { document.getElementById("result").innerHTML = err; } finally { document.getElementById("result").innerHTML += "<h3>الاستatement النهائي تم تنفيذه</h3>"; }اختبار لمعرفة‹/›
كلا جمل catch و finally إختياريتان، لكن يجب أن تستخدم واحدة منهما (أو كليهما إذا لم تكن تستخدم الاثنتين)، مع استخدام جملة try:
try { aaalert("Hello world"); } finally { document.getElementById("result").innerHTML = "sentence executed finally"; }اختبار لمعرفة‹/›
يملك JavaScript جسم Error مدمج يقدم معلومات عن الأخطاء عند حدوثها.
يقدم جسم الخطأ خصائصين مفيدة: name و message.
الجدول التالي يُظهر خصائص جسم Error:
السمة | وصف |
---|---|
name | يُمكن تعيين أو العودة بالاسم |
message | يُمكن تعيين أو العودة بـ رسالة الخطأ |
يمكن للسمة error name أن تعود بسبعة قيم مختلفة:
النوع | وصف |
---|---|
EvalError | يُمثل أخطاء حول الدالة العالمية eval() |
InternalError | يُمثل الخطأ الذي يحدث عند إطلاق خطأ داخلي في محرك JavaScript |
RangeError | يُمثل الخطأ الذي يحدث عندما يخرج متغير الرقم أو المعامل عن نطاقه المقبول |
ReferenceError | يُمثل الخطأ الذي يحدث عند إلغاء الإشارة إلى إشارة غير صالحة |
SyntaxError | يُمثل الخطأ الذي يحدث عند تحليل الكود في eval() |
TypeError | يُمثل الخطأ الذي يحدث عندما ليست المتغير أو المعامل نوعًا صالحًا |
URIError | يُمثل الخطأ الذي يحدث عند تقديم معامل غير صالح لـ encodeURI() أو decodeURI() |
القسم التالي سيقوم بتوضيح كل نوع من هذه الأخطاء بشكل مفصل.
عندeval()يتم رفع استثناء EvalError عند حدوث خطأ أثناء تنفيذ الدالة.
لكن JavaScript لم يعد يرفع هذا الخطأ، ولكن يُحافظ على هذا العنصر من أجل التوافق مع الإصدارات السابقة.
أحدث إصدارات JavaScript لا ترفع استثناءات EvalError. يستخدم SyntaxError بدلاً منها.
عند استخدام رقم خارج نطاق القيم المسموح بها، يتم إطلاق RangeError.
على سبيل المثال، إنشاء مصفوفة بطول سالب يرفع خطأ RangeError:
try { var arr = new Array(-1); // يرفع خطأ النطاق } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }اختبار لمعرفة‹/›
عندما تحاول إدراج أو الوصول إلى متغير أو عنصر غير موجود، عادةً يرفع خطأ ReferenceError.
try { var x = 5 + y; // يرفع خطأ الاستدلال على الاستدلال } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }اختبار لمعرفة‹/›
إذا كان لديك أي مشاكل نحوية في كودك JavaScript، سيتم إطلاق SyntaxError عند تشغيله
try { eval("alert('Hello)"); // سيتم إطلاق خطأ بسبب النقص في ' } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }اختبار لمعرفة‹/›
سيتم إطلاق TypeError عند أن يكون القيمة ليست النوع المتوقع
var num = 50; try { num.toUpperCase(); // لا يمكنك تحويل الرقم إلى حروف كبيرة } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }اختبار لمعرفة‹/›
سيتم إطلاق URIError عند تحديد URI غير صالح (محدد الموارد الموحدة)
try { decodeURI("%%"); // لا يمكنك تفكير رمز النسبة المئوية في URI } document.getElementById("result").innerHTML = err.name + "<br>" + err.message; }اختبار لمعرفة‹/›
للحصول على مرجع شامل للخصائص والأساليب، يرجى زيارةمرجع JavaScript Error.
يحتوي الجزء المشار إليه على وصفات و أمثلة لجميع خصائص Error و أنواعها.